学习首页/数组算法/滑动窗口交互演示 · JavaScript

代码与动画 SLIDING WINDOW

滑动窗口.

维护固定长度窗口的和,寻找总和最大的连续区间。

时间 O(n)空间 O(1)固定窗口长度

原理与执行逻辑

固定长度的相邻窗口共享大部分元素。维护当前窗口总和,每次右移只减去离开的值、加上新进入的值,逐个比较最大和。

执行步骤

  1. 累加前 k 个元素,作为初始窗口和。
  2. 用初始窗口和初始化最优值与起点。
  3. 窗口右移时加上 a[right],减去 a[right - k]。
  4. 当前和更大时更新最优值,扫描完返回最大和及区间。

关键理解

维护的 sum 始终等于当前长度 k 的连续区间之和。初始最优值取真实窗口和,因此全部为负数时也正确。

简短示例

[3, -2, 5, 1]、k = 3 时首窗和为 6;右移后减 3、加 1,新和为 4,因此保留首窗。

代码与执行动画

STEP 0 / 9
滑动窗口
function 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 };}
10 行 · 0 个片段标记
3a[0]-2a[1]5a[2]1a[3]-4a[4]8a[5]2a[6]
当前数据正在操作已访问 / 命中标记 / 指针
0

初始化窗口

累加前 3 个元素。

配置演示数据

应用后重新生成执行过程,可单步观察结果。

实现说明

滑动窗口的操作规则

窗口右移时移出左端值、加入右端值。允许负数;相同最大和保留首次出现的窗口。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。