From b76b199b17d0b3ff40f5c6d174e98e1f667de511 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Wed, 30 Sep 2026 12:17:47 -0400 Subject: [PATCH] feat(work): implement insert interval solution --- work/1/Medium/Array/57.insert-interval.py | 41 +++++++++++++++++------ 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/work/1/Medium/Array/57.insert-interval.py b/work/1/Medium/Array/57.insert-interval.py index 3139d28..c4808ee 100644 --- a/work/1/Medium/Array/57.insert-interval.py +++ b/work/1/Medium/Array/57.insert-interval.py @@ -23,7 +23,7 @@ Return intervals after the insertion. Note that you don't need to modify intervals in-place. You can make a new array and return it. - + Example 1: @@ -38,23 +38,44 @@ 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 + • 0 <= intervals.length <= 10^4 - • intervals[i].length == 2 + • intervals[i].length == 2 - • 0 <= starti <= endi <= 10^5 + • 0 <= starti <= endi <= 10^5 - • intervals is sorted by starti in ascending order. + • intervals is sorted by starti in ascending order. - • newInterval.length == 2 + • newInterval.length == 2 - • 0 <= start <= end <= 10^5 + • 0 <= start <= end <= 10^5 """ + class Solution: - def insert(self, intervals: list[list[int]], newInterval: list[int]) -> list[list[int]]: - + 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