剑指 Offer II 008. 和大于等于 target 的最短子数组

 

给定一个含有 n 个正整数的数组和一个正整数 target

找出该数组中满足其和≥ target的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0

 

sum记录长度,l记录起点,如果sum >= target,则min(当前长度),sum -= nums[l], l--

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int l = 0, minx = 100010;
        long long sum = 0;
        for(int i = 0; i < nums.size(); i++)
        {
            sum += nums[i];

            while(sum >= target)
            {
                minx = min(minx, i + 1 - l);
                sum -= nums[l], l++;

            }
        }
        return minx == 100010 ? 0 : minx;

    }
};

 

posted @ 2022-03-31 22:06  WTSRUVF  阅读(34)  评论(0编辑  收藏  举报