Coding Interview Prep · 课时

统计满足规则的窗口

至多 K 个减去至多 K-1 个的技巧

第 4 / 4 课13 个步骤

统计满足规则的窗口 是 CoddyKit 上的免费 Coding Interview Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Coding Interview Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Coding Interview Prep 课程共包含 4 节课。

计数,而非度量

有时您必须统计满足规则的子数组数量,而不是寻找最长的子数组。一个小技巧就能将它转化为简单的滑动窗口问题。🔢

恰好 K 个的难题

直接统计恰好包含 K 个目标的子数组并不容易。边界会不断变化,因此很难维护一个简洁的窗口。

改为统计至多 K 个

使用一个窗口来统计至多 K 个目标的子数组要容易得多。向右扩展时,每个有效的左端点都会对应一个可计数的子数组。

减法技巧

恰好 K 个等于 atMost(K) 减去 atMost(K - 1)。将两个容易计算的数量组合起来,就能得到实际想要的复杂结果。

answer = at_most(k) - at_most(k - 1)

构建辅助函数

请编写一个统计至多 k 个目标的子数组数量的函数。它维护一个滑动窗口,并在计数超过 k 时收缩窗口。

def at_most(k):
    left = 0
    total = 0

违反条件时收缩

向右扩展并更新窗口。当窗口包含更多于 k 个目标时,将左指针向前移动,使窗口回到允许范围内。

    while count > k:
        # remove a[left]
        left += 1

加入窗口计数

修正窗口后,所有以右端点结尾、起点从左端点到右端点的子数组都有效。请加入右减左加一。

    total += right - left + 1

为什么这个计数成立

对于固定的右端点,有效起点可以是左端点、左端点+1,一直到右端点。这正好是 right - left + 1 个子数组,并且都满足至多 k 个的条件。

组合两次调用

运行两次辅助函数并进行减法。每次调用的复杂度都是 O(n),因此完整的恰好 K 个计数整体仍然是线性的。

return at_most(k) - at_most(k - 1)

处理边界情况

当 k 为零时,atMost(k - 1) 会使用负一。请处理这种情况,使辅助函数仍能返回合理的零计数。

适用场景

“至多减去至多”这一思路适用于统计恰好包含 K 个不同值、K 个奇数,或满足任何按窗口具有单调性的属性的子数组。

快速检查

您希望统计恰好包含 K 个不同元素的子数组数量。

回顾

统计恰好 K 个就是 atMost(K) 减去 atMost(K - 1)。每个辅助函数都在 O(n) 时间内滑动窗口,因此整个计数过程仍然是线性的。✅

免费开始

用 AI 导师学习 Coding Interview Prep — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
90
课程
360

常见问题解答

「统计满足规则的窗口」课时是免费的吗?

是的 — 「统计满足规则的窗口」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Coding Interview Prep 课程的其余内容,请升级到 CoddyKit PRO。 Coding Interview Prep 课程共包含 4 节课。

「统计满足规则的窗口」这节课中我会学到什么?

至多 K 个减去至多 K-1 个的技巧 你通过在浏览器中直接运行的动手代码来练习 Coding Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Coding Interview Prep 需要有经验吗?

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

「统计满足规则的窗口」课时需要多长时间?

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

我能在这节 Coding Interview Prep 课中编写并运行代码吗?

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

此课程中的所有课时

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