题目:以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
思路:
① 按照键来排序
② 双指针(相邻指针进行从头到尾巴遍历)
PS:
二维数组排序
sorted(stu,key=(lambda x:x[0])) 按照第一维进行排序
代码:
def merge(intervals):
intervals = sorted(intervals, key=(lambda x:x[0])) # 需要重新赋值
p1, p2 = 0, 1
while p2 < len(intervals):
# if intervals[p1][0] == intervals[p1][1]:
# intervals.pop(p1)
if intervals[p2][1] >= intervals[p1][1] >= intervals[p2][0]:
intervals[p1] = [intervals[p1][0], intervals[p2][1]]
intervals.pop(p2)
elif intervals[p1][1] >= intervals[p2][1]:
intervals.pop(p2)
else:
p1 += 1
p2 += 1
return intervals
注释中是当对于[[0,0],[1,4]] 时,输出为 [1,4] 时候的写法
正确答案是对于[[0,0],[1,4]],输出依旧为[[0,0],[1,4]]。