Problem
Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
Solution
首先对间隔数组按左边界进行排序,在遍历数组,逐一对比相邻两个数组,可以合并的就合并,不能合并就把最后一次合并的结果存入res中
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
res = list()
n = len(intervals)
if n==0 or n==1:
return intervals
intervals = list(sorted(intervals,key=lambda r:r[0]))
for i in range(1,n):
left = intervals[i-1]
right = intervals[i]
if left[1]>=right[0]:
right[0] = min(left[0],right[0])
right[1] = max(left[1],right[1])
else:
res.append(left)
res.append(right)
return res