代码与动画 SLIDING WINDOW
滑动窗口.
维护固定长度窗口的和,寻找总和最大的连续区间。
时间 O(n)空间 O(1)固定窗口长度
原理与执行逻辑
固定长度的相邻窗口共享大部分元素。维护当前窗口总和,每次右移只减去离开的值、加上新进入的值,逐个比较最大和。
执行步骤
- 累加前 k 个元素,作为初始窗口和。
- 用初始窗口和初始化最优值与起点。
- 窗口右移时加上 a[right],减去 a[right - k]。
- 当前和更大时更新最优值,扫描完返回最大和及区间。
关键理解
维护的 sum 始终等于当前长度 k 的连续区间之和。初始最优值取真实窗口和,因此全部为负数时也正确。
简短示例
[3, -2, 5, 1]、k = 3 时首窗和为 6;右移后减 3、加 1,新和为 4,因此保留首窗。
代码与执行动画
STEP 0 / 9function maxWindow(arr, k) { let sum = 0; for (let i = 0; i < k; i++) sum += arr[i]; let best = sum, start = 0; for (let right = k; right < arr.length; right++) { sum += arr[right] - arr[right - k]; if (sum > best) { best = sum; start = right - k + 1; } } return { sum: best, start, end: start + k - 1 };}当前数据正在操作已访问 / 命中标记 / 指针
0
初始化窗口
累加前 3 个元素。
配置演示数据
应用后重新生成执行过程,可单步观察结果。
滑动窗口的操作规则
窗口右移时移出左端值、加入右端值。允许负数;相同最大和保留首次出现的窗口。
对应题目与扩展练习
观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。
固定长度窗口最大和除以窗口长度,得到最大平均数。