Sliding Window
滑动窗口
技巧核心时间 O(n)空间 O(1) ~ O(k)
维护一段连续子数组,右端扩张、左端收缩,窗口内统计一次更新。
动画
7
02
19
24
31
48
55
63
7滑动窗口:长度为 3 的最大子数组和
1 / 8
- 默认
讲解
定长 / 不定长子数组最值、最少覆盖、最长无重复子串。
- 01定长:先填满 k 个,再每次右进一、左出一。
- 02不定长:右指针扩张,直到不满足条件,再移动左指针。
- 03窗口内用哈希或计数器维护状态。
易错点
- 更新答案的时机:扩张后还是收缩后,要想清楚。
- 左指针只前进不回退,才能保证 O(n)。
代码
function maxWindowSum(a, k) {
let sum = class="text-accent">0;
for (let i = class="text-accent">0; i < k; i++) sum += a[i];
let best = sum;
for (let r = k; r < a.length; r++) {
sum += a[r] - a[r - k];
best = Math.max(best, sum);
}
return best;
}