题目描述:
dj思路:
因为原区间已经排好序了,如果按照合并区间的思路,将新数组加入进去然后对区间排序,之后在遍历,时间复杂度为O(nlogn),这样就没有很好利用原区间已经排好序的特性。
因此,这是可以利用二分的特性,先找到新数组的插入位置,然后在遍历数组,这样时间复杂度为O(n)。
代码:
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
if not intervals:
return [newInterval]
res = []
n = len(intervals)
def searcking(intervals, newInterval):
# 二分法先找插入位置
l = 0
r = n - 1
mid = (r + l) // 2
tar = newInterval[0]
while l <= r:
if intervals[mid][0] == tar:
if intervals[mid][1] < newInterval[1]:
mid += 1
return mid
elif intervals[mid][0] > tar:
r = mid - 1
else:
l = mid + 1
mid = (l + r) // 2
return l
index = searcking(intervals, newInterval)
intervals.insert(index, newInterval)
res = [intervals[0]]
for i in range(1, len(intervals)):
if intervals[i][0] <= res[-1][1]:
res[-1] = [res[-1][0], max(intervals[i][1], res[-1][1])]
else:
res.append(intervals[i])
return res