classSolution:definsert(self, intervals: List[List[int]], newInterval: List[int])-> List[List[int]]:ifnot intervals:return[newInterval]
size =len(intervals)
lo, hi =0, size
while lo < hi:# 找到区间左端小于newInterval[0]的最右的下标
mid = lo +(hi - lo)//2if intervals[mid][0]> newInterval[0]:
hi = mid
else:
lo = lo +1
index = lo -1# 代表区间左端小于newInterval[0]的最右的下标# left, right 表示插入newInterval后,相关区间合并后的左右端if index <0:# 当index = -1,表示newInterval[0] < intervals[0][0]
left = newInterval[0]
index +=1# 加1为了使其等于0,使得下面while循环遍历起点不出错
indexa = index
elif intervals[index][1]< newInterval[0]:#该情况表示第index个区间不参与合并,所以indexa(表示前indexa个区间不参与合并)等于index+1
left = newInterval[0]
indexa = index +1else:#该情况表示第index个区间参与合并,所以indexa等于index
left = intervals[index][0]
indexa = index
while index < size:if intervals[index][1]< newInterval[1]:
index +=1elif newInterval[1]<= intervals[index][1]and newInterval[1]>= intervals[index][0]:
right = intervals[index][1]
index +=1breakelse:
right = newInterval[1]breakif index == size:# 包含两种情况 intervals[-1][1] < newInterval[1] 和 newInterval[1] <= intervals[-1][1] and newInterval[1] >= intervals[-1][0]
right =max(intervals[-1][1], newInterval[1])return intervals[:indexa]+[[left, right]]+ intervals[index:]