题目描述
思路解析动画文字版
两两比较所有会议是 O(n²)。
按开始时间排序后,只需要检查相邻会议是否前一个结束晚于后一个开始。
① 先按「开始时间」排序:排序是关键:把可能冲突的会议排到相邻位置。
② 比相邻:[5,10] 的开始 5 ↔ 前一场 [0,30] 的结束 30:重叠判断只看「后场开始 vs 前场结束」。
③ 5 < 30 → 两场时间重叠!:后场开始 < 前场结束 = 冲突。
④ 存在重叠 → 立即返回 false:有一处冲突,整体就不能全参加。
⑤ 对照:若每场 start ≥ 前场 end → true:排序后相邻都不撞,才说明全部能参加。
一句话记住:按开始时间排序后,只需要检查相邻会议是否前一个结束晚于后一个开始。
边界三连:本题真边界:单场、相接、包含。
雷区实演 · 为什么排序后只比相邻:排序把 O(n²) 两两比较降成 O(n) 只比相邻。
面试追问 · 核心思路:思路:按开始排序,扫相邻,后场 start < 前场 end 即冲突。
面试追问 · 对比会议室 II:252 只判能否全参加;253 求最少会议室数。
面试追问 · 复杂度:复杂度:排序 O(n log n) 主导,扫描 O(n)。
这题学完不要乱跳,下一步去对应专题 /leetcode-animation/ds?k=interval 连刷同类题;卡住时用 AI 答疑问“我的状态定义哪里不稳”。
参考代码
class Solution: def canAttendMeetings(self, intervals): intervals.sort() for i in range(1, len(intervals)): if intervals[i][0] < intervals[i - 1][1]: return False return True复杂度
- 时间复杂度:O(n log n),排序主导;之后一趟线性扫描相邻区间
- 空间复杂度:O(log n),排序递归栈(原地排序,不算输入)
可套用的代码模板
记牢:按 start 排序 → 扫相邻 → start < prevEnd 即重叠返回 false。
Python
# 区间无重叠判定 骨架intervals.sort() # 按 start 排序for i in range(1, len(intervals)): if intervals[i][0] < intervals[i-1][1]: # 后场开始 < 前场结束 return False # 重叠 → 不能全参加return True易错点
面试追问把动画讲成自己的话
追问整体思路是什么?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
会议室 II
LeetCode 253 · 中等 · 沿着 区间 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题