209. 长度最小的子数组

从头开始累加,如果加完某个元素后大于等于target,则考虑循环删除起始元素,并设起始元素的下个元素为起始元素

记录大于等于target时的长度,求最小即可

这样一定会经过结果子集

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int ret = 1e5 + 10, cnt = 0;
        long long sum = 0;
        int n = nums.size();
        for(int i = 0; i < n; i++)
        {
            sum += nums[i];
            cnt++;
            while(sum - nums[i - cnt + 1] >= target)
            {
                sum -= nums[i - cnt + 1];
                cnt--;
            }
            if(sum >= target)
                ret = min(ret, cnt);

        }
        if(ret == 1e5 + 10) return 0;
        return ret;
    }
};
原文地址:https://www.cnblogs.com/WTSRUVF/p/15559007.html