双指针构建滑动窗口
滑动窗口原理
滑动窗口: 整个窗口是在目标数组上滑动的,窗口的大小是快指针和慢指针之间的子数组,同过窗口的滑动以及窗口的收缩,在快指针遍历完一次数组后,得到符合条件的子窗口,并记录下来。
注意: 滑动窗口的是一个先扩张,后收缩的过程,每次遍历只有快慢指针中的一个指针中的一个移动。在编程过程中,判断何时开始收缩是关键。
滑动窗口实现
例题:
分析: 在此题中,滑动窗口开始收缩的条件是子数组的总和大于target。
代码实现:
int minSubArrayLen(int target, vector<int>& nums) {
// 双指针法 (滑动窗口)
int FastIdx = 0, SlowIdx = 0;
int sum = 0;
int res = INT32_MAX;
while(FastIdx < nums.size())
{
sum += nums[FastIdx];
while(sum >= target) // 窗口开始收缩的条件
{
if(FastIdx - SlowIdx + 1 < res)
res = FastIdx - SlowIdx + 1;
sum-=nums[SlowIdx++];
}
FastIdx++;
}
return res == INT32_MAX ? 0 : res;
}