参考上一题 Leecode 56
只需要将newInterval添加到intervals中,再排个序,然后使用leecode 56中的代码就好。因为除了添加了一个区间之外,57题与56题之间没有区别(就当是复习一下上一题的代码)。
class Solution(object):
def insert(self, intervals, newInterval):
"""
:type intervals: List[List[int]]
:type newInterval: List[int]
:rtype: List[List[int]]
"""
intervals.append(newInterval) # 添加新区间
intervals.append([100000, 100000]) # 因为是从下标1开始,需添加一个很大的区间,这样就省去了边界条件
intervals.sort() # 排序,使得区间的起始值递增,则只需记录结束值
L = []
flag = 0
end = intervals[0][1] # 记下第一个区间的结束值
for i in range(1, len(intervals)):
if end >= intervals[i][0]: # 如果上一时刻与当前区间有重叠,(注意这里的上一时刻指的是当前区间前面的所有区间,则记下上一时刻的起始值(最开始产生重叠的起始值)),则保存当前区间的结束值与上一时刻的结束值最大的那一个
if flag == 0: # 标记是否产生重叠
start = intervals[i-1][0]
flag = 1
end = max(end, intervals[i][1])
else: # 上一时刻与当前时刻并未产生重叠
if flag == 0: # 并且之前也并未重叠,则直接保存上一区间
start, end = intervals[i-1][0], intervals[i-1][1]
L.append([start, end])
else: # 之前发生了重叠,保存最终重叠区间
L.append([start, end])
flag = 0
end = intervals[i][1] # 结束值从当前区间重新开始
return L