0Pricing
Coding Interview Prep · 课时

按起点排序区间

处理事件前先排序

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

什么是区间

区间就是一对数字,分别表示起点和终点,例如 [2, 5]。大多数区间问题处理的都是由这些数对组成的列表。📏

排序带来条理

原始区间可能以任意顺序出现,这使得问题难以分析。先对区间进行排序,就能将混乱的数据变成从左到右的清晰扫描。

按起点排序

默认做法是按起点值排序。这样每个区间的起点都不早于前一个区间,您只需向前扫描一次。

intervals.sort(key=lambda x: x[0])

元组会自然排序

如果将区间存储为元组,Python 会先按第一个元素排序,再按第二个元素排序,无需额外操作。这里甚至不需要键函数。

intervals = [(3, 7), (1, 4), (2, 5)]
intervals.sort()

为什么先按起点排序

按起点排序可以让您按照时间顺序处理事件。下一个区间只能在更晚的时间开始,这是扫描时的关键不变量。

起点相同时

当两个区间的起点相同时,次级键会决定它们的顺序。按(起点,终点)排序会让较短的区间排在前面,这通常很有帮助。

intervals.sort(key=lambda x: (x[0], x[1]))

有时按终点排序

有些问题,例如安排尽可能多的事件,会改为按终点排序。请选择与扫描过程需要了解的信息相匹配的键。

intervals.sort(key=lambda x: x[1])

排序的开销

排序需要 O(n log n) 的时间,这个开销很小,并且通常会成为这类问题的主要开销。之后的扫描只需要 O(n) 时间。

保留附加数据

如果每个区间还带有编号或权重,请对整个记录排序,而不只是对边界排序。排序键控制顺序,其他数据则会随之移动。

intervals.sort(key=lambda iv: iv[0])  # iv = (start, end, id)

先排序,再扫描

几乎所有区间算法都遵循先 sort,再扫描。只要顺序正确,合并、计数和调度就会变成简单的循环。

一个简单的心智模型

可以把区间想象成参加聚会的客人。按起点排序会按照到达时间将他们排好队,这样您就能逐个接待。

快速检查

您即将合并一个区间列表。

回顾

区间是一个起点-终点数对,按起点排序可以将杂乱的列表变成清晰的扫描顺序。先排序,再向前处理,扫描复杂度为 O(n)。🚀

常见问题解答

「按起点排序区间」课时是免费的吗?

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

「按起点排序区间」这节课中我会学到什么?

处理事件前先排序 你通过在浏览器中直接运行的动手代码来练习 Coding Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

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

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

「按起点排序区间」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 按起点排序区间
  2. 合并重叠区间
  3. 使用扫描线求最大重叠数
  4. 使区间互不重叠所需的最少删除数
← 返回 Coding Interview Prep