原题地址:力扣
先根据左边界对列表进行排序
因为要合并,所以一直在原数组上操作很麻烦,用ret存放合并后的数组。
一共有三种情况:
1、len(ret) == 0 or ret[-1][1] < x[i][0]:
显而易见这种情况不用合并,直接append即可。
2、ret[-1][1] > x[i][0] and ret[-1][1] < x[i][1]:
[1,3],[2,4]->[1,4]
此时结果为[ret[i][0],x[i][1]]
3、ret[-1][1] > x[i][0] and ret[-1][1] >= x[i][1]:
[1,4],[2,3]->[1,4]
此时结果为[ret[i][0],x[i][0]]
第二、三种情况可以合并为ret[-1][1] = max(x[i][1], ret[-1][1])
'''
先排序
[0,4],[1,4]
# 永远更新的是最后一个元素
'''
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
n = len(intervals)
ret = []
x = sorted(intervals, key = lambda i: i[0]) # 根据左边界进行排序
for i in range (n):
if len(ret) == 0 or ret[-1][1] < x[i][0]:
ret.append(x[i])
else:
ret[-1][1] = max(x[i][1], ret[-1][1])
return ret