0
点赞
收藏
分享

微信扫一扫

3 滑动窗口

吴陆奇 2022-03-13 阅读 28

题目:
209. 长度最小的子数组

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int sum = 0;
        int curLength = 0;
        int minLength = INT_MAX;
        //枚举每一段子数组
        for(int i = 0 ; i < nums.size();i++){
            sum = 0;
            for(int j = i; j < nums.size();j++){
                sum += nums[j];
                if(sum >= target){
                    curLength = j - i + 1;
                    if(curLength < minLength) minLength = curLength;
                    break;
                }
            }
        }
        if(minLength == INT_MAX)
            return 0;
        else
            return minLength;
    }
};
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int sum = 0;
        int curLength = 0;
        int minLength = INT_MAX;
        //l:滑动窗口左侧
        int l = 0;
        //r:滑动窗口右侧
        for(int r = 0 ; r < nums.size();r++){
            sum += nums[r];
            while(sum >= target){
                curLength = r - l + 1;
                if(curLength < minLength) minLength = curLength;
                //向右滑动
                sum -= nums[l++];
               
            }
        }
        if(minLength == INT_MAX)
            return 0;
        else
            return minLength;
    }
};
举报

相关推荐

0 条评论