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;}
}