欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Minimum Size Subarray Sum

程序员文章站 2022-07-15 17:46:25
...

Minimum Size Subarray Sum

1. 解析

题目大意,在保证连续子序列的和不小于目标值的情况下,求解子序列的最短长度

2. 分析

序列中的元素都是大于0的,即都是递增,所以,我们可以设置left和right左右指针,right指针往前移动,sum记录当前[left, right]范围的累和,当sum > 目标值s,缩小窗口[left, right]的范围,即left往右移动,直到sum < 目标值,则当前子序列的长度就是right-left;继续往下搜索,重新获取窗口[left, right]的子序列长度,更新最小值即可

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int left = 0, right = 0, res = nums.size() + 1;
        int cur = 0;
        int sum = 0;
        while (right < nums.size()){
            while (right < nums.size() && sum < s){ //扩大窗口
                sum += nums[right++];
            }
            while (sum >= s){ //缩小窗口
                res = min(res, right-left);
                sum -= nums[left++];               
            }
        }
        return res == nums.size() + 1 ? 0 : res;
    }
};

 [1]https://www.cnblogs.com/grandyang/p/4501934.html