天天看点

20200628-leetcode每日一题——滑动窗口算法

问题描述:

20200628-leetcode每日一题——滑动窗口算法

子数组类求极值问题,我们就往滑动窗口上面靠。

方法模板:

外层循环右指针向右,扩大窗口,内层循环左指针向右,缩小窗口,在窗口内求极值。

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