题目:长度最小的子数组
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}
来源:语雀原笔记