LeetCode 209. 长度最小的子数组(C++)

题目:

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。

示例:

输入: s = 7, nums = [2,3,1,2,4,3]
输出: 2
解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。

思路:

采用滑动窗口的方式,从数组最左侧开始向右滑动,以子数组内所有元素和sum与s的关系作为滑动条件,当sum

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int left = 0,right = -1;    //[left..right]为连续子数组,初始时不包含任何元素
        int sum = 0;
        int minLen = nums.size() + 1;   //满足条件的子数组的最小长度
        while(left < nums.size()){
            if(sum < s && right + 1 < nums.size())
                sum += nums[++right];
            else
                sum -= nums[left++];
            if(sum >= s)
                minLen = min(right - left + 1,minLen);
        }
        if(minLen == nums.size() + 1)
            return 0;
        return minLen;
    }
};

你可能感兴趣的:(LeetCode,c++)