leetcode(Array)–209 长度最小的子数组
1,题目:
2,思路:
- 用滑动窗口:left为慢指针,right为快指针。
- 当其和>s时,left慢指针右移,缩小窗口
- 当其和<s时,right快指针右移,扩大窗口
3,代码:
class Solution {
public int minSubArrayLen(int s, int[] nums) {
int len = nums.length;
if(len == 0)
return 0;
int left = 0;//左指针
int right = 0;//右指针,也从最左侧开始移动
int sum = 0;//窗口元素的和
int minSize = Integer.MAX_VALUE;//最小窗口
while(right < len){//窗口中的元素小于目标值,右指针向右移动,扩大窗口
sum+=nums[right++];
while(sum >= s){//窗口中的元素大于目标值,左指针向右移,缩小窗口
minSize = Math.min(minSize,right-left);
sum-=nums[left++];//sum就减去left位置的值,同时left向右移动,缩小窗口
}
}
return minSize == Integer.MAX_VALUE ? 0:minSize;
}
}