1. 介绍
滑动窗口算法在《挑战程序设计竞赛》一书中被称为 “虫取法”。
这种称呼非常生动形象,
因为滑动窗口的 两个指针移动的过程 与虫子爬动的过程相似:
后脚不动,前脚移动;前脚不动,后脚移动。
同时虫子的身体表示 元素连续。
通常用于解决 “最短/最长子数组” 、“最短/最长连续数” 等。
核心点:最、连续
2. 代码模版
// 定义结果
long res = 0L;
int n = nums.length;
// 滑动窗口 需 满足的条件
long sum = 0;
// 枚举右指针
int left = 0;
for (int right = 0; right < n; right++) {
sum += nums[right];
// 满足条件 到 不满足条件
// 或 不满足条件 到 满足条件
while(sum * (right - left + 1) >= k){
// 收缩左指针
sum -= nums[left++];
}
res += (right - left + 1);
}
return res;