LCR 008. 长度最小的子数组 - 力扣(LeetCode)
思路:
- 首先在暴力枚举的方法下,我们可以进行优化,让right不用从头开始,只需让left移动,进行判断。
- 然后就是变成了同向双指针,也就是滑动窗口。
- right向右移动,同时记录下sum 的值,直到sum >= target
- 然后left右移,继续判断
代码:
public int minSubArrayLen(int target, int[] nums) {
int n = nums.length;
int minLen = Integer.MAX_VALUE;
int sum = 0;
for(int left = 0, right = 0; right < n; right++){
//进窗口
sum += nums[right];
//连续判断
while(sum >= target){
//更新最小长度
minLen = Math.min(minLen,right - left +1);
//滑出窗口
sum -= nums[left++];
}
}
return minLen == Integer.MAX_VALUE ? 0 : minLen;
}