【力扣】合并区间
来源:力扣(LeetCode)
以数组 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
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`