题目:长度最小的子数组

使用到的是滑动窗口

minSubArrayLen()

 1int minSubArrayLen(int target, vector<int>& nums)
 2{
 3    int n = nums.size(), sum = 0, left = 0;
 4    // 因为最后的结果输出的是子数组长度
 5    // 所以最大长度肯定不会超过原数组长度 n
 6    int res = n + 1;
 7    // 遍历右边的节点
 8    for(int right = 0; right < n; right++)
 9    {
10        // 首先将右指针指向的节点加到 sum 中
11        sum += nums[right];
12        // 不断缩小窗口
13        while(target <= sum - nums[left])
14        {
15            sum -= nums[left];
16            // 左端点右移
17            left++;
18        }
19        // 此时经过缩小之后,如果 sum 仍然大于等于 target
20        // 就记录一次答案
21        if(target <= sum)
22        {
23            res = std::min(res, right - left + 1);
24        }
25    }
26    return res == n + 1 ? 0 : res;
27}

来源:语雀原笔记