Insert Interval

Last modified: July 21, 2026

#cp-medium

My Code (badly written)

class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        N = len(intervals)
        pre_i,pos_i = 0,N-1

        j = pos_i
        newIntervals= []

        if not (N):
            return [newInterval]
        elif N==1:
            
        else:
            for i in range(len(intervals)-1):
                
                if intervals[i][0] <= newInterval[0]:
                    pre_i = i
                if intervals[j][1] >= newInterval[1]:
                    pos_i = j
                j-=1        
        merged_pre = []
        merged_pos = []
        merged = []
        if newInterval[0]-intervals[pre_i][1] <= 0 :
            merged_pre= [intervals[pre_i][0],newInterval[1]]
            pre_i-=1
        if newInterval[1] - intervals[pos_i][0] >= 0:
            merged_pos = [newInterval[0],intervals[pos_i][1]]
            pos_i+=1
        
        if merged_pre and merged_pos:
            merged = [merged_pre[0],merged_pos[1]]
        elif merged_pre:
            merged = merged_pre
        elif merged_pos:
            merged = merged_pos
        else:
            merged = newInterval
        print(merged)
        print(pre_i,pos_i)
        if pre_i >=0:
            for i in range(pre_i+1):
                newIntervals.append(intervals[i])
        newIntervals.append(merged)
        if pos_i < len(intervals):
            for i in range(pos_i,len(intervals)):
                newIntervals.append(intervals[i])

        return newIntervals
        
        
            

Did not cover the edge cases properly!

Better Code

class Solution:
    def insert(
        self, intervals: List[List[int]], newInterval: List[int]
    ) -> List[List[int]]:
        n = len(intervals)
        i = 0
        res = []

        # Case 1: No overlapping before merging intervals
        while i < n and intervals[i][1] < newInterval[0]:
            res.append(intervals[i])
            i += 1

        # Case 2: Overlapping and merging intervals
        while i < n and newInterval[1] >= intervals[i][0]:
            newInterval[0] = min(newInterval[0], intervals[i][0])
            newInterval[1] = max(newInterval[1], intervals[i][1])
            i += 1
        res.append(newInterval)

        # Case 3: No overlapping after merging newInterval
        while i < n:
            res.append(intervals[i])
            i += 1

        return res