Input:
intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]],
newInterval = [4,8]
Output: [[1,2],[3,10],[12,16]]
Explanation: Because the new interval [4,8]
overlaps with [3,5],[6,7],[8,10].
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
res = []
i, start, end = 0,0,1
#finding interval where interval[i].end >= newInterval[start]
while i < len(intervals) and newInterval[start] > intervals[i][end]:
res.append(intervals[i])
i+=1
#if interval[start] is less than newInterval[end] this means we can merge
#We borrowing "intervals[i][start] <= newInterval[end]" from Merge Interval
while i < len(intervals) and intervals[i][start] <= newInterval[end]:
newInterval[start] = min(newInterval[start], intervals[i][start])
newInterval[end] = max(newInterval[end], intervals[i][end])
i+=1
res.append(newInterval)
while i < len(intervals): #place the rest of the intervals
res.append(intervals[i])
i+=1
return res
#Time: O(n)
#Space: O(n)