题目链接:209. 长度最小的子数组 - 力扣(LeetCode)
题目:
给定一个含有 n
个正整数的数组和一个正整数 target
。找出该数组中满足其总和大于等于 target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0。
对于这道题我们可以使用滑动窗口来写,定义一个sum来存储子数组的值,reslut用来定义一个较大的值,因为我们后面要拿它进行比较大小,然后定义两个指针,j在前面遍历数组,sum用来把j遍历数组的值加起来,也就是我们的子数组,它是用来和我们的target比大小,当sum的值加起来大于等于target的时候,这个时候就是存在长度最小的子数组,我们可以使用Math.min()计算出最小值,子数组的长度该怎么计算呢,我们可以使用数组末尾减去数组开始,但数组的索引是从0开始的,所以我们还需要加1,就变成了j-i+1,。那么找出来过后,我们是不是需要考虑sum的值,是不是需要把它前面加的值都减去,如果不减去的话,sum的值会一直增大,后面就会一直比较,但它会选择我们第一次满足sum>target条件的数组长度,因为如果这么循环下去的话,我们的数组长度是越来越长的,再继续比大小就没有什么意义了,所以可以写成sum-=num[i++];然后再后面选择一个比较大的数和数组长度进行比大小就行了,如果等于那个大值就是不存在符合条件的子数组返回0,否则返回子数组长度,这个就是长度最小的子数组了。
附上代码: