思路:
滑动窗口。
end
是右区间边界
start
是左区间边界
for
loop 用于扩大边界
while
loop 用于缩小边界
res = Math.min(res, end - start + 1)
要放在 while
循环里,因为每次收缩左边界start
(start++
) 的时候,都应该判断 res
.
class Solution {
public int minSubArrayLen(int target, int[] nums) {
// Sliding Window
int start = 0, end = 0, sum = 0, res = Integer.MAX_VALUE;
for (; end < nums.length; end++) {
sum += nums[end];
while (sum >= target) {
res = Math.min(res, end - start + 1);
sum -= nums[start++];
}
}
return res == Integer.MAX_VALUE ? 0 : res;
}
}
时间:O(n)
. n
为数组长度.
空间:O(1)