合并区间是经典的算法问题,常用于处理重叠时间段或范围的场景,例如日程安排、地理坐标合并等。该问题的核心在于如何高效地识别并合并重叠的区间。
📘 问题描述
给定一个由区间组成的列表,每个区间包含两个数字 [start, end]
,要求将重叠或相连的区间合并为一个,最终返回不重叠的区间集合。
例如:
输入: [[1,3],[2,6],[8,10]]
输出: [[1,6],[8,10]]
(重叠区间 [1,3]
和 [2,6]
被合并)
✅ 解题思路
- 排序:按区间的起始点从小到大排序。
- 合并:遍历排序后的区间,若当前区间与结果集最后一个区间重叠,则合并;否则直接加入结果集。
- 重叠判断条件:
当前区间起始点 <= 结果集最后一个区间的结束点
- 重叠判断条件:
- 优化:若区间为空或新区间与结果集无交集,直接添加。
⚙️ 代码实现(Python示例)
def merge_intervals(intervals):
if not intervals:
return []
# 按起始点排序
intervals.sort(key=lambda x: x[0])
merged = [intervals[0]]
for current in intervals[1:]:
last = merged[-1]
if current[0] <= last[1]:
# 合并区间
merged[-1] = [last[0], max(last[1], current[1])]
else:
merged.append(current)
return merged
📚 推荐扩展阅读
🧠 小贴士
- 该问题常作为面试题出现,需注意边界条件(如空列表、单个区间)。
- 用 贪心算法 可以在 $O(n \log n)$ 时间复杂度内完成,排序是关键步骤。
如果需要其他语言版本(如英文)或更详细的讲解,欢迎访问 算法专题页面 获取更多资源!