Loading

Leetcode - 56. 合并区间

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

示例 1:

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

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解1 2021/9/8 O(n)

def merge(intervals: list) -> list:
    len=intervals.__len__()
    if len==1: return intervals
    # 题目并没有限定说intervals是升序排列的,先排一下
    intervals.sort()
    res=[]
    l=r=0
    while l<len:
        a=intervals[l][0]
        b=intervals[l][1]
        while r<len and intervals[r][0]<=b:
            # merge
            intervals[l][1]=max(intervals[l][1],intervals[r][1])
            b = intervals[l][1]
            r+=1
        res.append([a,b])
        l=r
    return res

if __name__ == '__main__':
    # [[1,6],[8,10],[15,18]]
    intervals = [[1, 3], [2, 6], [8, 10], [15, 18]]
    print(merge(intervals))
    # [[1,5]]
    intervals = [[1, 4], [4, 5]]
    print(merge(intervals))
    intervals = [[1, 9], [4, 5]]
    print(merge(intervals))
    intervals = [[99,101],[1, 9], [4, 5]]
    print(merge(intervals))

posted @ 2021-09-08 09:08  wwcg2235  阅读(31)  评论(0)    收藏  举报