表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并
时间: 2023-07-27 11:03:52 浏览: 161
合并区间.md
算法思路:
1. 先将区间按照起始位置进行排序,这样可以确保相邻的区间更容易进行合并。
2. 初始化一个结果列表,将第一个区间加入结果列表。
3. 遍历区间集合的剩余区间,分以下情况进行处理:
- 如果当前区间的起始位置大于结果列表中最后一个区间的结束位置,说明当前区间与结果列表中前面的区间没有重叠,直接将当前区间加入结果列表。
- 否则,当前区间与结果列表中最后一个区间有重叠,根据结束位置更新结果列表中最后一个区间的结束位置,确保结果列表中的区间集合仍能满足合并的要求。
4. 返回最终合并后的结果列表。
时间复杂度分析:
排序区间的时间复杂度为O(nlogn),遍历区间的时间复杂度为O(n),因此算法的总时间复杂度为O(nlogn),其中n为区间的个数。
代码实现:
```python
def merge(intervals):
# 将区间按照起始位置进行排序
intervals.sort(key=lambda x: x[0])
# 初始化结果列表
merged = [intervals[0]]
# 遍历区间集合的剩余区间
for interval in intervals[1:]:
# 如果当前区间的起始位置大于结果列表中最后一个区间的结束位置,直接加入结果列表
if interval[0] > merged[-1][1]:
merged.append(interval)
else:
# 当前区间与结果列表中最后一个区间有重叠,更新结果列表中最后一个区间的结束位置
merged[-1][1] = max(merged[-1][1], interval[1])
return merged
```
例子:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
阅读全文