自学内容网 自学内容网

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)数组先按元素的左端点进行排序

2)创建一个空list

3)  如果list还没有值或者下一个元素的左端点大于list最外面元素的右端点,则说明不能合并

4)否则,可以合并,修改list最外面右端点的值;取max(merge[-1][1], i[1])

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

if __name__ == '__main__':
    s=Solution()
    intervals = [[1, 3], [2, 6], [8, 10], [15, 18]]
    print(s.merge(intervals))

原文地址:https://blog.csdn.net/m0_38098373/article/details/140573599

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!