首页 > 其他分享 >lc.209 长度最小的子数组

lc.209 长度最小的子数组

时间:2023-03-02 20:56:14浏览次数:38  
标签:target int sum lc.209 result 数组 长度

题目

给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

示例

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

解题思路

  • 题目中所要求得的是连续子数组
  • 滑动窗口的方法:用一个for循环,循环变量是终止位置,先从数据元素0开始,一个个累加,找到满足条件的子数组;当找到满足条件的子数组时记录子数组长度,并且要将起始序列往前进1;再次执行for循环操作,直至终止位置到达最后一个数组元素
  • 程序中要设定一个结果值,用来储存每次找到的符合条件的子数组的最短长度

代码实现

 //滑动窗口的办法   题目中是寻找一个  连续子数组
    int result = INT32_MAX; //将结果赋值为整数型最大值
    int sum = 0;
    int i = 0;
    int len = 0;    //定义找到的数组长度
    for(int j = 0; j < nums.size(); j++){
        sum += nums[j];  //不满足大于等于target时就一直往后加
        while(sum >= target){    //当满足大于等于target时要开始移动开始位置的i
            len = (j - i + 1);
            result = result < len ? result : len;   //记录此时找到的符合要求的数组长度,如果小于result就记录下来,直到找到符合条件的最小的数组长度
            sum -= nums[i++];    //sum -= num[i]; & i++;
        }
    }
    return result == INT32_MAX ? 0 : result;

标签:target,int,sum,lc.209,result,数组,长度
From: https://www.cnblogs.com/wangshoutong/p/17171329.html

相关文章