1. 合并区间算法详解
1.1 问题分析与排序预处理
合并区间问题的核心在于处理多个可能重叠的区间,将它们合并成不重叠的区间集合。我们首先需要对所有区间按照左边界进行排序,这是解决问题的关键第一步。
排序的作用在于:
- 确保我们总是处理当前最左边的区间
- 使重叠区间的判断变得简单直接
- 避免复杂的回溯检查
时间复杂度分析:排序步骤使用Python内置的Timsort算法,时间复杂度为O(nlogn),这将成为整个算法的时间复杂度上限。
1.2 合并逻辑与边界处理
合并过程采用贪心算法策略,维护一个"当前合并区间"的概念:
- 初始化时将第一个区间作为当前合并区间
- 遍历后续每个区间,比较当前区间的左边界与合并区间的右边界
- 如果存在重叠(当前左边界 ≤ 合并右边界),则扩展合并区间的右边界
- 如果不重叠,则将当前合并区间加入结果,并开始新的合并区间
边界情况处理:
- 空输入:直接返回空列表
- 单区间输入:直接返回该区间
- 完全包含的区间:自动处理,因为max(right)会保留更大的右边界
1.3 完整实现与优化
python复制class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
if not intervals:
return []
# 按左边界排序
intervals.sort(key=lambda x: x[0])
merged = []
current_start, current_end = intervals[0]
for interval in intervals[1:]:
start, end = interval
if start <= current_end: # 存在重叠
current_end = max(current_end, end) # 扩展右边界
else:
