#56
Medium
贪心

Merge Intervals

合并所有重叠区间。

ArraySorting

题目定位

按起点排序之后,题目就变成一次贪心扫描:要么扩展当前区间,要么提交当前区间并开启新区间。

关键观察

按起点排序后,是否重叠只取决于当前合并区间的右端点。

目标复杂度

O(n log n) / O(n)

这题的解法思路怎么拆

1

按起点排序之后,题目就变成一次贪心扫描:要么扩展当前区间,要么提交当前区间并开启新区间。

2

按起点排序后,是否重叠只取决于当前合并区间的右端点。

3

先找出那个最能保留未来选择空间的局部决策。

4

如果排序能让这个选择被验证,就先排序。

参考实现

Python
# Generic pattern template
items.sort(key=priority)
answer = 0
for item in items:
    if can_take(item):
        take(item)
        answer = update(answer)

常见坑点

warning

没先排序就开始合并。

warning

循环结束后忘了把最后一个活动区间放进答案。

高频追问

如果题目改成最少删除多少区间,怎么变?

如果区间两端都是闭区间,判断重叠时要注意什么?

继续刷相关题

先把 贪心 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 56. Merge Intervals 题解思路 | Interview AiBox