【力扣】合并区间

来源:力扣(LeetCode)

以数组 intervals 表示若干个区间的集合,其中单个区间为 \(intervals[i] = [start_i, end_i]\)。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]


为了处理List的第一个或者最后一个元素,使之输出正常,添加了特定判断条件while导致时间超时

`

def merge(self, intervals: List[List[int]]) -> List[List[int]]:
    a = []
    if len(intervals)<=1:
        return intervals
    else:
        for i in range(1,len(intervals)):
            tmp = intervals[i][0]
            if tmp <= intervals[i-1][1]:
                a.append([intervals[i-1][0],intervals[i][1]])
                continue
            while i==1:
                a.append(intervals[i-1])
            a.append(intervals[i])
        return a`

       `

官方:
作者:LeetCode-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`