题目
给定一个含有 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