Leetcode 56:合并区间(最详细的解法!!!)

版权声明:本文为博主原创文章,未经博主允许不得转载。有事联系:[email protected] https://blog.csdn.net/qq_17550379/article/details/83272413

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

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

示例 2:

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

解题思路

我们首先想到的做法是先将输入的区间按照第一个元素排序。然后我们建立一个result用来存储最后的结果。我们现将第一个区间放入result中,然后对于后面输入的区间的item.startresult[-1].end比,如果result[-1].end < item.start,我们就将item加入到result,否则话说明要放入的区间和result[-1]有重叠,那么我们取result[-1].end = max(result[-1].end, item.end)

class Solution:
    def merge(self, intervals):
        """
        :type intervals: List[Interval]
        :rtype: List[Interval]
        """
        intervals.sort(key=lambda x: x.start)
        result = list()
        for item in intervals:
            if not result or result[-1].end < item.start:
                result.append(item)
            else:
                result[-1].end = max(result[-1].end, item.end)

        return result

我们知道这个算法的时间复杂度是O(nlogn)级别,其实还有一个更快的解法,但是太复杂了,我们就不去谈它了。

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

猜你喜欢

转载自blog.csdn.net/qq_17550379/article/details/83272413