LeetCode-滑动窗口-209. 长度最小的子数组

209. 长度最小的子数组

思路一:暴力法

class Solution {
    
    
public:
    int minSubArrayLen(int target, vector<int>& nums) {
    
    
        vector<int> recVec;
        int res = INT32_MAX;  //用来存放最终结果的
        int sum=0;   //子序列数值之和
        int subLength = 0;   //子序列长度
        for(int i=0;i<nums.size();i++){
    
     
            sum = 0;
            for(int j=i;j<nums.size();j++){
    
    
                sum +=nums[j];   
                if(sum>=target){
    
    
                    subLength = j-i+1;
                    res = res<subLength ? res :  subLength;
                    break;
                }
            }
        }
        return res = res == INT32_MAX ? 0 : res;
    }
};

思路二:滑动窗口

class Solution {
    
    
public:
    int minSubArrayLen(int target, vector<int>& nums) {
    
    
        vector<int> recVec;
        int res = INT32_MAX;  //用来存放最终结果的
        int sum=0;   //子序列数值之和
        int subLength = 0;   //子序列长度
        int i = 0;   //滑动窗口的起始位置
        for(int j=0;j<nums.size();j++){
    
     
            sum += nums[j];
            while(sum>=target){
    
    
                subLength = j-i+1;
                res = res < subLength ? res : subLength;
                sum -=nums[i++];
            }
        }
        return res = res == INT32_MAX ? 0 : res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_21449473/article/details/121299675