版权声明:本文为博主原创文章,未经博主允许不得转载。有事联系:[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.start
和result[-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
如有问题,希望大家指出!!!