算法:合并间隔56. Merge Intervals
发布人:shili8
发布时间:2025-01-10 23:26
阅读次数:0
**算法:合并间隔**
###问题描述给定一个区间列表,合并所有重叠的区间。
### 示例输入:`[[1,3],[2,6],[8,10],[15,18]]`
输出:`[[1,6],[8,10],[15,18]]`
### 思路本题要求我们实现一个函数,能够合并所有重叠的区间。我们可以先按照区间的起始值进行排序,然后遍历每个区间,检查是否与前一个区间有重叠。如果有重叠,我们更新前一个区间的结束值;如果没有重叠,我们将当前区间添加到结果列表中。
###代码实现
class Solution: def merge(self, intervals): # 按照区间的起始值进行排序 intervals.sort(key=lambda x: x[0]) merged = [] for interval in intervals: # 如果当前区间与前一个区间有重叠,更新前一个区间的结束值 if not merged or merged[-1][1] < interval[0]: merged.append(interval) else: # 更新前一个区间的结束值 merged[-1][1] = max(merged[-1][1], interval[1]) return merged# 测试用例solution = Solution() intervals = [[1,3],[2,6],[8,10],[15,18]] print(solution.merge(intervals)) # 输出:[[1,6],[8,10],[15,18]]
### 时间复杂度分析时间复杂度为 O(n log n),其中 n 是区间列表的长度。原因是我们首先需要对区间列表进行排序,这个操作的时间复杂度为 O(n log n)。然后,我们遍历每个区间,检查是否与前一个区间有重叠,这个操作的时间复杂度为 O(n)。因此,总时间复杂度为 O(n log n + n) = O(n log n)。
### 空间复杂度分析空间复杂度为 O(n),其中 n 是区间列表的长度。原因是我们需要存储排序后的区间列表,这个列表的大小为 O(n)。