Harukaze

 

【力扣】合并区间

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-intervals
以数组 intervals 表示若干个区间的集合,其中单个区间为 \(intervals[i] = [start_i, end_i]\)。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

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


为了处理List的第一个或者最后一个元素,使之输出正常,添加了特定判断条件while导致时间超时

`

def merge(self, intervals: List[List[int]]) -> List[List[int]]:
a = []
if len(intervals)<=1:
return intervals
else:
for i in range(1,len(intervals)):
tmp = intervals[i][0]
if tmp <= intervals[i-1][1]:
a.append([intervals[i-1][0],intervals[i][1]])
continue
while i==1:
a.append(intervals[i-1])
a.append(intervals[i])
return a`

`


官方:
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/merge-intervals/solution/he-bing-qu-jian-by-leetcode-solution/

def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort(key=lambda x: x[0])

merged = []
for interval in intervals:
# 如果列表为空,或者当前区间与上一区间不重合,直接添加
if not merged or merged[-1][1] < interval[0]: #上一区间的写法
merged.append(interval)
else:
# 否则的话,我们就可以与上一区间进行合并
merged[-1][1] = max(merged[-1][1], interval[1])

return merged`

posted on 2021-07-13 10:41  Harukaze  阅读(162)  评论(0)    收藏  举报

导航