题目描述
思路解析动画文字版
记住判定式:排好序后,只要出现「前一场结束 > 后一场开始」,就是撞车。下面每一帧都在套这一句。
5 场会议按你给的顺序排着:[14,18] [1,3] [9,12] [4,7] [19,22] [7,9]。柱子的高度就是它的开始时间,现在还乱着,先按开始时间排序。
第 1 趟找最早开场:拿候选 [1,3](开始 1)和目前最早的 [1,3] 比。它更早,记下它当新的最早。
第 1 趟找最早开场:拿候选 [9,12](开始 9)和目前最早的 [1,3] 比。没它早,最早仍是 [1,3]。
第 1 趟找最早开场:拿候选 [4,7](开始 4)和目前最早的 [1,3] 比。没它早,最早仍是 [1,3]。
第 1 趟找最早开场:拿候选 [19,22](开始 19)和目前最早的 [1,3] 比。没它早,最早仍是 [1,3]。
第 1 趟找最早开场:拿候选 [7,9](开始 7)和目前最早的 [1,3] 比。没它早,最早仍是 [1,3]。
选定后 [1,3] 归位(绿色)。最左边 1 场已按开始时间从早到晚排好。
第 2 趟找最早开场:拿候选 [9,12](开始 9)和目前最早的 [9,12] 比。它更早,记下它当新的最早。
第 2 趟找最早开场:拿候选 [4,7](开始 4)和目前最早的 [4,7] 比。它更早,记下它当新的最早。
第 2 趟找最早开场:拿候选 [19,22](开始 19)和目前最早的 [4,7] 比。没它早,最早仍是 [4,7]。
第 2 趟找最早开场:拿候选 [7,9](开始 7)和目前最早的 [4,7] 比。没它早,最早仍是 [4,7]。
选定后 [4,7] 归位(绿色)。最左边 2 场已按开始时间从早到晚排好。
第 3 趟:在还没归位的会议里挑开始最早的——是 [7,9](高亮),开始 7。
选定后 [7,9] 归位(绿色)。最左边 3 场已按开始时间从早到晚排好。
第 4 趟:在还没归位的会议里挑开始最早的——是 [9,12](高亮),开始 9。
选定后 [9,12] 归位(绿色)。最左边 4 场已按开始时间从早到晚排好。
第 5 趟:在还没归位的会议里挑开始最早的——是 [14,18](高亮),开始 14。
选定后 [14,18] 归位(绿色)。最左边 5 场已按开始时间从早到晚排好。
排序结束!所有会议按开始时间从早到晚站好队:[1,3] [4,7] [7,9] [9,12] [14,18] [19,22]。柱子高度从左到右递增。下面挨个检查相邻两场会不会撞车。
检查第 1 对:前一场 [1,3] 在 3 结束,后一场 [4,7] 在 4 才开。3 ≤ 4,没重叠,继续看下一对。
检查第 2 对:前一场 [4,7] 在 7 结束,后一场 [7,9] 在 7 才开。7 ≤ 7,没重叠,继续看下一对。
检查第 3 对:前一场 [7,9] 在 9 结束,后一场 [9,12] 在 9 才开。9 ≤ 9,没重叠,继续看下一对。
检查第 4 对:前一场 [9,12] 在 12 结束,后一场 [14,18] 在 14 才开。12 ≤ 14,没重叠,继续看下一对。
检查第 5 对:前一场 [14,18] 在 18 结束,后一场 [19,22] 在 19 才开。18 ≤ 19,没重叠,继续看下一对。
所有相邻会议都不重叠,这一堆会议可以全部参加。答案是 true。
三个高频追问:排序键的选择、端点相接的判定、以及和「会议室数量」LC253 的关系。
参考代码
def canAttendMeetings(meetings): meetings.sort(key=lambda m: m[0]) # 按开始时间排序 for i in range(1, len(meetings)): # 前一场的结束 比 后一场的开始 还晚 → 重叠 if meetings[i-1][1] > meetings[i][0]: return False return True复杂度
- 时间:O(n log n),瓶颈在排序;排完只需一趟 O(n) 线性扫描
- 空间:O(1),原地排序、只用常数个变量(不算排序自身递归栈)
易错点
面试追问把动画讲成自己的话
追问为什么是按「开始时间」排序,而不是结束时间?
追问端点相接算不算重叠?比如 [1,5] 和 [5,8]。
追问如果进一步问「最少需要几间会议室」怎么办?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
会议室 II
LeetCode 253 · 中等 · 沿着 区间 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题