57. Insert Interval
You are given an array of non-overlapping intervals intervals where intervals[i] = [starti, endi] represent the start and the end of the i^th interval and intervals is sorted in ascending order by starti. You are also given an interval newInterval = [start, end] that represents the start and end of another interval
Example 1:
- Input:
intervals = [[1,3],[6,9]], newInterval = [2,5] - Output:
[[1,5],[6,9]]
Example 2:
- 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].
Constraints:
0 <= intervals.length <= 10^4intervals[i].length == 20 <= starti <= endi <= 10^5- intervals is sorted by starti in ascending order.
newInterval.length == 20 <= start <= end <= 10^5
Solution
class Solution:
def insert(
self, intervals: list[list[int]], newInterval: list[int]
) -> list[list[int]]:
result = []
i, n = 0, len(intervals)
start, end = newInterval
# Everything before
while i < n and intervals[i][1] < start:
result.append(intervals[i])
i += 1
# Everything merged
while i < n and intervals[i][0] <= end:
start = min(start, intervals[i][0])
end = max(end, intervals[i][1])
i += 1
result.append([start, end])
# Everything after
result.extend(intervals[i:])
return result