描述
分析
滑动窗口。
窗口内的和大于等于tatger时,记录此时的长度,并比较是不是最小长度。窗口左边界右移,直到窗口内的和小于tatger。
窗口内的和小于tatger时,窗口右边界右移。
代码
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int i = 0, j = 0;
int sum = 0, minLen = Integer.MAX_VALUE;
while (j < nums.length) {
// i-j (包含) 的和
sum += nums[j];
while (sum >= target) {
// 左边界右移,直到 sum 小于target,记录最小值
minLen = Math.min(minLen, j - i + 1);
sum -= nums[i++];
}
j++; // 此时sum 小于target,右边界右移
}
// 如果没找到 sum 大于等于 target, 返回0
return minLen == Integer.MAX_VALUE ? 0 : minLen;
}
}