当前位置: 首页 > java >正文

长度最小的子数组(leetcode)

难度:中等

题目描述

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3]是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]
输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

思路

这道题是一个很经典的滑动窗口问题,设置两个指针一个left一个right,将它们都初始化为0。之后先让左边界不变,移动右边界到滑动窗口框出来的所有数的和更好大于等于目标值,此时计算出当前滑动窗口长度并和最小值比较,若小于则替换最小值,之后滑动窗口的左边界向前进一步,同时当前滑动窗口的值要剪掉刚刚的左边界(因为进了一步,删掉了前一步的左边界)。最后一定一定不要忘记,不能直接输出当前最小值m,如果没有满足要求的值,此时的最小值依然为我们最开始初始化的最大值INT_MAX,因此要判断一下最小值是否为初始化的值,是则输出0表示没有满足要求的子数组,不是则输出当前最小值。

代码

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left=0,right=0;int m=INT_MAX;int sum=0;int n=nums.size();if(n==0) return 0;while(right<n){sum=sum+nums[right];while(sum>=target){m=min(m,right-left+1);sum=sum-nums[left];left++;}right++;}if(m==INT_MAX) return 0;else return m;}
};

时间复杂度

  • 时间复杂度:O(n)。n为数组长度。

  • 空间复杂度:O(1)。只需常数空间存放若干变量。

http://www.xdnf.cn/news/5590.html

相关文章:

  • C++ 与 Go、Rust、C#:基于实践场景的语言特性对比
  • 风车OVF镜像:解放AI开发限制的Ubuntu精简系统
  • 【vue】全局组件及组件模块抽离
  • Maven 项目中将本地依赖库打包到最终的 JAR 中
  • 如何使用主机名在 CMD 中查找 IP 地址?
  • leetcode 18. 四数之和
  • 力扣 旋转图像
  • 横向移动(上)
  • zorin系统详解
  • 牛客周赛 Round 92(再现京津冀蓝桥杯???)
  • C++23 中的 views::stride:让范围操作更灵活
  • 「华为」人形机器人赛道投资首秀!
  • STM32核心机制解析:重映射、时间片与系统定时器实战——从理论到呼吸灯开发
  • fiddler 配置ios手机代理调试
  • 保持Word中插入图片的清晰度
  • ✅ TensorRT Python 安装精简流程(适用于 Ubuntu 20.04+)
  • CVPR2025 | Prompt-CAM: 让视觉 Transformer 可解释以进行细粒度分析
  • 如何应对网站被爬虫和采集?综合防护策略与实用方案
  • 5.12第四次作业
  • spring常用注解
  • 从海洋生物找灵感:造个机器人RoboPteropod,它能在水下干啥?
  • 【C++贪心】P11044 [蓝桥杯 2024 省 Java B] 食堂|普及
  • 华为FAT AP配置 真机
  • Java学习手册:服务网关与路由
  • 《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match
  • Bravery靶机通关笔记
  • 机器学习管道 pipeline
  • OpenCV中Canny、Sobel和Laplacian边界检测算法原理和使用示例
  • django之视图
  • OpenCV图像金字塔详解:原理、实现与应用