4.长度最小的子数组:
209.长度最小的子数组:
题目:
209. 长度最小的子数组 - 力扣(LeetCode)
分析:
怎么做呢?定义一个快慢指针,先让快指针往后移动,直到找到和大于等于 target ,更新len然后让慢指针往前挪动,当慢指针和快指针组成的和小于target时,让快指针继续往后遍历并让慢指针停止,直到快指针和慢指针之间的区间之和大于等于 target,以此往复,直到遍历完数组。
代码:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
int len = Integer.MAX_VALUE;
int fast = 0, slow = 0;
int sum = 0;
for(; fast < nums.length;fast++){
sum += nums[fast];
while(sum >= target){
// 一开始没想到使用min去更新
len = Math.min(len, fast - slow + 1);
sum -= nums[slow++];
}
}
// 这一步忘记考虑所有元素和<target了
return len == Integer.MAX_VALUE?0:len;
}
}