滑动窗口题目集合

leetcode209 长度最小的子数组

题目

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的子数组[, , ..., , ] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

题解

确定左值,向右扩展直到满足 target,记录当前窗口大小,移动左值,重复上述动作,直到右值不能再拓展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int size = nums.size();
int left = 0;
int right = 0;
int sum = nums[0];
int minLen = size + 1;
while (left < size && right < size) {
if (sum >= target) {
minLen = min(minLen, right - left + 1);
sum -= nums[left];
left ++;
continue;
}
if (right == size - 1) break;
right ++;
sum += nums[right];
}
if (minLen == size + 1) return 0;
return minLen;
}

};

p