mq018.区间合并

 

题目链接

啊这个题之前做过的,首先按照每个区间的第一个数字排序再开始依次排序,如果后一个区间的左端点大于前一个区间的右端点那么久直接将区间加入答案不做任何改变。当然第一个区间也是直接放到答案里。如果发现并列的两个区间有重复的部分就将前一个区间的右端点设置为后一个区间的右端点,此时我们不需要去管左端点因为已经排序过了,必定符合题意。这个算法的时间复杂度是O(NlogN),空间复杂度是O(logN),分别是排序所需的时间复杂度和空间复杂度。

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort(key=lambda x: x[0])
        merged = []
        for x in intervals:
            if not merged or merged[-1][1] < x[0]:
                merged.append(x)
            else:
                merged[-1][1] = max(x[1], merged[-1][1])
        return merged