📅  最后修改于: 2023-12-03 15:37:10.180000             🧑  作者: Mango
在处理一些区间相关的问题时,有时需要将重叠的区间合并成一个区间。例如,对于区间 $[1,3]$、$[2,4]$ 和 $[5,6]$,合并后的区间为 $[1,4]$ 和 $[5,6]$。本文将介绍如何合并重叠区间。
将所有区间按照左端点排序。然后,从头到尾遍历所有区间,对于相邻的两个区间,如果它们重叠了,就将它们合并成一个区间。具体地,如果第一个区间的右端点大于等于第二个区间的左端点,就说明它们重叠了,此时将它们合并成一个区间,右端点为两个区间右端点中的最大值。
下面是 Python 代码实现:
def merge(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
我们可以对该函数进行如下测试:
intervals = [[1, 3], [2, 4], [5, 6]]
print(merge(intervals)) # 输出 [[1, 4], [5, 6]]
该算法的时间复杂度为 $O(n\log n)$,其中 $n$ 为区间个数,主要是排序的时间复杂度。空间复杂度为 $O(n)$,用于存储合并后的区间。因此,该算法是比较高效的,适用于一般规模的数据。