0Pricing
Competitive Programming Academy · 课时

固定大小窗口求和

在 O(n) 内滑动长度为 k 的窗口

固定大小窗口求和 是 CoddyKit 上的免费 Competitive Programming Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Competitive Programming Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Competitive Programming Academy 课程共包含 4 节课。

重复求和问题

许多任务要求计算每个由连续 k 个元素组成的块的总和。从头重新计算每个块很浪费,您可以做得更好。🪟

先看低效做法

朴素方法会分别计算每个长度为 k 的窗口的总和。这样会重复工作,复杂度为 O(n × k),对于大型输入来说太慢。

for i in range(n - k + 1):
    s = sum(a[i:i + k])

关键洞察

相邻窗口几乎完全重叠。向右移动一步时,只需移除最左侧的元素,并在右侧加入一个新元素。

初始化第一个窗口

首先计算一次前 k 个元素的总和。这个总和会作为基础值,在窗口向前滑动时持续更新。

window = sum(a[:k])
best = window

向右滑动一步

要移动窗口,请加上进入窗口的元素,并减去离开窗口的元素。这样每一步只需进行 O(1) 的工作。

for i in range(k, n):
    window += a[i] - a[i - k]

跟踪答案

每次滑动后,更新您需要的内容,例如目前为止见过的最大值窗口总和。窗口的值始终可以立即得到。

    best = max(best, window)

总开销是线性的

每个元素都会被访问一次以加入总和,又被访问一次以移除,因此整个扫描的复杂度为 O(n)。这可以轻松满足大型数据规模的限制。

注意索引

离开窗口的元素是 a[i - k],而不是 a[i - 1]。正确处理这个偏移量是固定窗口中最常见的错误。

平均值也能轻松得到

如果需要的是窗口的最大平均值而不是总和,只需将记录的窗口总和除以 k。滑动逻辑完全不变。

avg = window / k

处理较小数组

如果数组短于 k,就不存在完整窗口。请预先检查 len(a) 是否小于 k,并提前返回,以避免索引错误。

if n < k:
    return None

适合使用固定窗口的场景

当窗口的长度固定,并且可以廉价地组合其中的值时,请使用这种模式,例如计算总和、计数或简单的增量统计量。

快速检查

您正在将大小为 k 的窗口沿数组逐步向右滑动。

回顾

只需初始化一次第一个窗口,然后在每一步通过加上并减去元素,以 O(1) 的开销滑动窗口。整个固定大小的扫描在线性时间内完成。✅

常见问题解答

「固定大小窗口求和」课时是免费的吗?

是的 — 「固定大小窗口求和」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Competitive Programming Academy 课程的其余内容,请升级到 CoddyKit PRO。 Competitive Programming Academy 课程共包含 4 节课。

「固定大小窗口求和」这节课中我会学到什么?

在 O(n) 内滑动长度为 k 的窗口 你通过在浏览器中直接运行的动手代码来练习 Competitive Programming Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Competitive Programming Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Competitive Programming Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「固定大小窗口求和」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Competitive Programming Academy 课中编写并运行代码吗?

能。每节 Competitive Programming Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 固定大小窗口求和
  2. 双指针处理可变窗口
  3. 最长无重复子串
  4. 统计满足规则的窗口
← 返回 Competitive Programming Academy