介绍
滑动窗口可以看作是一种双指针,只有一个指针运动,而另一个保持静止,其目标是找出序列中满足要求的特定子序列。
题目
209. 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
if (accumulate(nums.begin(), nums.end(), 0) < target) return 0;
int left = 0, right = 0, n = nums.size(), ans = n, sum = nums[0];
while (right< n) {
if (sum < target) {
right++;
if (right < n) sum += nums[right];
}else {
if (ans > right -left + 1) ans = right - left + 1;
sum -= nums[left];
left++;
}
}
return ans;
}
};
https://leetcode.cn/