57. Insert Interval

T: O(n)

S: O(n)

class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {
        List<int[]> res = new ArrayList<>();
        int n = intervals.length;
        int i = 0;
        while (i < n && intervals[i][1] < newInterval[0]) {
            res.add(intervals[i]);
            i++;
        }
        int s = newInterval[0];
        int e = newInterval[1];
        while (i < n && intervals[i][0] <= e) {
            s = Math.min(intervals[i][0], s);
            e = Math.max(intervals[i][1], e);
            i++;
        }
        res.add(new int[]{s, e});
        
        while (i < n) {
            res.add(intervals[i]);
            i++;
        }
        
        int[][] result = new int[res.size()][2];
        for (int r = 0 ; r < res.size(); r++) {
            result[r] = res.get(r);
        }
        return result;
    }
}

/*
intervals is sorted in ascending 


[1,3],   [6,9]
   [2,5]
   
[[1,2],[3,5],[6,7],[8,10],[12,16]]
         [4,          9]
         
         1. add no intersection intervals
         
         2.
         when new[end] >= each interval[s]
         how to merge?
         find min in these intervals & new intervals
              max
         => [3,5],[6,7],[8,10], [4, 9], min is 3, max is 10 => [3, 10]
         
         3.
         add remain intervals
*/

Last updated