合并区间是经典的算法问题,常用于处理重叠时间段或范围的场景,例如日程安排、地理坐标合并等。该问题的核心在于如何高效地识别并合并重叠的区间。


📘 问题描述

给定一个由区间组成的列表,每个区间包含两个数字 [start, end],要求将重叠或相连的区间合并为一个,最终返回不重叠的区间集合。
例如:
输入: [[1,3],[2,6],[8,10]]
输出: [[1,6],[8,10]]
(重叠区间 [1,3][2,6] 被合并)


✅ 解题思路

  1. 排序:按区间的起始点从小到大排序。
  2. 合并:遍历排序后的区间,若当前区间与结果集最后一个区间重叠,则合并;否则直接加入结果集。
    • 重叠判断条件:当前区间起始点 <= 结果集最后一个区间的结束点
  3. 优化:若区间为空或新区间与结果集无交集,直接添加。
合并区间示意图

⚙️ 代码实现(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

📚 推荐扩展阅读

interval_merge 流程图

🧠 小贴士

  • 该问题常作为面试题出现,需注意边界条件(如空列表、单个区间)。
  • 贪心算法 可以在 $O(n \log n)$ 时间复杂度内完成,排序是关键步骤。

如果需要其他语言版本(如英文)或更详细的讲解,欢迎访问 算法专题页面 获取更多资源!