LeetCode合并区间
以数组 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表达式的方法,这个是必须要掌握的哈,很多情况下都会有类似的需求:对列表或元组进行排序,自定义排序标准。
这道题只要记得要先进行排序的套路(一定要记住,合并区间问题是很高频的),后续就会容易很多。
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签