lc056.合并区间

 

合并区间

想做一下新的题型,结果好像又和双指针有点关系?啊可是这是区间合并的题型,然后主流的算法都是先将输入的区间排序然后遍历做的,就是扫描线算法? 如代码所示,排序后。我们用另一个数组来存储答案,首先将第一个区间加入merged数组,然后开始判断区间数组中的第一个区间左端点是否大于merged数 组中最后一个区间的右端点,如果不是,说明没有重合,可以直接将区间加入merged数组。如果有重合,则进行合并,其方法是将merged里最后一个数组的 右端点改为”merged最后区间的右端点与区间数组中第一个区间的右端点中的最大值”。

(这种题型是不是和线段树有联系啊?)//待更新

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        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