滑动窗口是特殊的双指针
长度最小的子数组
给定target 。找出满足其和 ≥ target 的长度最小的连续子数组
实现滑动窗口,主要确定如下三点:
- 窗口内是什么?满足其和 ≥ target 的长度的连续子数组
- 如何移动窗口的起始位置?如果当前窗口的值大于等于target了,L向右移动。
- 如何移动窗口的结束位置?如果当前窗口的值小于target了,R向右移动。
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int ans = nums.length + 1;
int sum = 0, i = 0;
for(int j = 0; j < nums.length; ++j) {
sum += nums[j];
while(sum >= target) {
int len = j - i + 1;
ans = len < ans ? len : ans;
sum -= nums[i++];
}
}
return ans == nums.length + 1 ? 0 : ans;
}
}