📜  合并重叠区间(1)

📅  最后修改于: 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)$,用于存储合并后的区间。因此,该算法是比较高效的,适用于一般规模的数据。