题目描述
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]
示例 2:
输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出:[[1,2],[3,10],[12,16]]
解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。
解题思路
参考官方解法,以及56题解法,没有什么特别的技巧,直接求解。
要插入的区间,left,right,和原区间的li,ri,如果left>ri,不重叠,插入到右侧,正常添加区间[li,ri];如果right<li,要插入到左侧,然后把区间[li,ri]添加到后面
参考代码
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
left,right = newInterval
placed = False
merged = list()
for li,ri in intervals:
if li > right:
if not placed:
merged.append([left,right])
placed = True
merged.append([li,ri])
elif ri < left:
merged.append([li,ri])# 要插入到右边时,不能直接插入,还要继续跟后续的区间进行比较。
else:
# 进行区间合并
left = min(left,li)
right = max(right,ri)
if not placed:
merged.append([left,right])
return merged