56. 合并区间
- 排序:
- 将所有区间按起始位置
start
从小到大排序。 - 这样,重叠的区间会相邻排列,方便后续合并。
- 合并:
- 初始化一个空列表
merged
,用于存储合并后的区间。 - 遍历排序后的区间列表:
- 如果
merged
为空,或者当前区间与 merged
中最后一个区间不重叠,则将当前区间直接添加到 merged
中。 - 否则,合并当前区间与
merged
中最后一个区间,更新 merged[-1][1]
为两者结束位置的最大值。
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:# 1. 按照区间的起始位置进行排序intervals.sort(key=lambda x: x[0])# 2. 初始化一个空列表用于存储合并后的区间merged = []# 3. 遍历排序后的区间列表for interval in intervals:# 如果 merged 为空,或者当前区间与 merged 中最后一个区间不重叠if not merged or merged[-1][1] < interval[0]:# 将当前区间直接添加到 merged 中merged.append(interval)else:# 否则,合并当前区间与 merged 中最后一个区间merged[-1][1] = max(merged[-1][1], interval[1])# 4. 返回合并后的区间列表return merged
时间复杂度分析
- 排序:时间复杂度为 O(n log n),其中
n
是区间的数量。 - 遍历合并:时间复杂度为 O(n)。
空间复杂度分析
- 使用了额外的列表
merged
存储结果,空间复杂度为 O(n)。