思路:
先将原数组按照所有区间的左端点进行排序,遍历数组,比较index和index+1,当有重叠情况时,我们把合并后的数组放在index位置,删除index+1位置。如果没有重叠,index=index+1。直至遍历完,返回该数组。
重叠与不重叠的情况共有三种:(已经排过序,intervals[index][0] <= intervals[index + 1][0]一定成立)
- intervals[index][0] <= intervals[index + 1][0] <= intervals[index][1] <= intervals[index + 1][1]
例子:[1,3] [2,4]->[1,4]
- intervals[index][0] <= intervals[index + 1][0] <= intervals[index + 1][1] <= intervals[index][1]
例子:[1,4] [2,3]->[1,4]
- intervals[index][1] < intervals[index + 1][0]
例子:[1,2] [3,4]
代码如下:
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
if not intervals:
return []
index = 0
length = len(intervals)
intervals.sort(key=lambda x: x[0])
while index < length:
if index + 1 < length:
if intervals[index][1] < intervals[index + 1][0]:
index += 1
continue
if intervals[index][0] <= intervals[index + 1][0] <= intervals[index][1] <= intervals[index + 1][1]:
intervals[index][1] = intervals[index + 1][1]
if intervals[index][0] <= intervals[index + 1][0] <= intervals[index + 1][1] <= intervals[index][1]:
pass
intervals.pop(index + 1)
length -= 1
else:
break
return intervals