/
Insert Interval
Approach
Insert newInterval into a sorted list of non-overlapping intervals and merge overlaps.
Three phases in one pass:
- Add all intervals ending before
newIntervalstarts - Merge every overlapping interval into
newInterval - Append the rest unchanged
Sorting first is unnecessary because input is already sorted.
Time Complexity: O(n)
Space Complexity: O(n) for output
Code
class Solution:
def insert(
self, intervals: List[List[int]], newInterval: List[int]
) -> List[List[int]]:
result = []
i = 0
n = len(intervals)
while i < n and intervals[i][1] < newInterval[0]:
result.append(intervals[i])
i += 1
while i < n and intervals[i][0] <= newInterval[1]:
newInterval[0] = min(newInterval[0], intervals[i][0])
newInterval[1] = max(newInterval[1], intervals[i][1])
i += 1
result.append(newInterval)
while i < n:
result.append(intervals[i])
i += 1
return result