题目:力扣
思路:
这里第一次接触到滑动窗口这个思想。
滑动窗口,就是不断的调节子数组的起始位置和终止位置,从而得出我们要想的结果。
滑动窗口也可以理解为双指针。
使用滑动窗口,我们需要确定三个点:
1.窗口内的内容;
2.什么时候移动起始位置;
3.什么时候移动终止位置;
本题的要求是:找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。
那么窗口的内容就得到了:满足窗口内的元素和 ≥ target
最小的 连续子数组
什么时候移动起始位置 : 当窗口内的元素和大于target就可移动
什么时候移动终止位置:当窗口内的元素和小于target就可以移动。
代码:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int left = 0;
int sum = 0;
int result = Integer.MAX_VALUE;
for (int right = 0; right < nums.length; right++) {
sum += nums[right];
while (sum >= target) {
result = Math.min(result, right - left + 1);
sum -= nums[left];
left++;
}
}
return result == Integer.MAX_VALUE ? 0 : result;
}
}