--- title: '57. Insert Interval' description: 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 icon: dot topics: - { name: "Array", slug: "array" } sidebar: label: 'Insert Interval' badge: 'Medium' --- ### 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^4` - `intervals[i].length == 2` - `0 <= starti <= endi <= 10^5` - intervals is sorted by starti in ascending order. - `newInterval.length == 2` - `0 <= start <= end <= 10^5` ## Solution ```py 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 ```