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] 可被视为重叠区间。

思路:

  请和我一起形成条件反射:合并区间问题,要先把区间按开始位置排序

  这是因为排完序后的区间,我们每取下一个,都可以最大程度地与前一个接近,从而方便我们做判断:它到底是可以合并入前一个区间;还是自己成为一个新的区间。

  直接看代码吧!看懂注释特别简单。

代码:

class Solution(object):

    def merge(self, intervals):

        intervals = sorted(intervals,key=lambda x:x[0])#对区间进行排序

        res = [intervals[0]]#第一个区间作为结果的第一个初始化区间,res是结果列表

        for i  in range(1,len(intervals)):#从第二个区间开始遍历

            #他的开始小于等于结果列表最后一个区间的结束,就说明可以合并
            if intervals[i][0]<=res[-1][1]:

#合并方法就是看看谁的末尾更长,看看这个新区间是可以直接被包容,还是可以更新加长这个区间的长度
                res[-1][1]=max(res[-1][1],intervals[i][1])

            else:#如果新区间的开始大于结果列表最后一个区间的结束

                res.append(intervals[i])#则它自成一个新的区间

        return res#返回结果列表

小结:

  我们对区间的第一个值进行排序,可以直接用sort+lambda表达式的方法,这个是必须要掌握的哈,很多情况下都会有类似的需求:对列表或元组进行排序,自定义排序标准。

  这道题只要记得要先进行排序的套路(一定要记住,合并区间问题是很高频的),后续就会容易很多。

posted @   JunanP  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签
点击右上角即可分享
微信分享提示