问题描述:
子数组类求极值问题,我们就往滑动窗口上面靠。
方法模板:
外层循环右指针向右,扩大窗口,内层循环左指针向右,缩小窗口,在窗口内求极值。
int minSubArrayLen(int s, vector<int>& nums) {
int min=nums.size()+2;
int left=0;
int right=0;
int sum=0;
int len=nums.size();
//滑动窗口想法。每次循环过后,窗口包含元素总是最小连续子数组。
while(right<len){ //外层循环右指针向右,
sum+=nums[right];
while(sum>=s){
//内层指针左指针向左。
int window=right-left+1;
if(window<min) min=window;
sum-=nums[left];
left++;
}
right++;
}
//特殊判断,整个数组全部加起来也达不到指定s值。
return min==nums.size()+2 ? 0:min;
}
};