·题目描述
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
·解题思路
1.先对数组进行排序
2.先判断头两个数组是否可以合并,若是可以合并则直接将合并的结果加入到result数组中;若是不能合并,那么就将两个数组都加入到result数组中
3.进入循环,每次判断获取的数组是否可以和resul最后一个元素合并,若是可以合并,则先弹出数组的末尾元素,然后再添加合并后的结果
4.若是获取的数组不能和result末尾数组合并,那么就直接将获取的数组添加到result中
·代码
class Solution(object):
def merge(self, intervals):
intervals.sort()
n = len(intervals)
result = []
res = intervals[0]
if n == 1:
return intervals
if intervals[1][0] <= res[1]:
left = min(res[0],intervals[1][0])
right = max(res[1],intervals[1][1])
res = [left,right]
result.append(res)
else:
result.append(intervals[0])
result.append(intervals[1])
for i in range(2,n):
if result[len(result)-1][0]<= intervals[i][0] <= result[len(result)-1][1] :
left = min(result[len(result)-1][0],intervals[i][0])
right = max(result[len(result)-1][1],intervals[i][1])
res = [left,right]
result.pop(-1)
result.append(res)
else:
result.append(intervals[i])
return result