57. Insert Interval

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

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].
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { // time: O(n); space: O(n)
    vector<vector<int> > res;
    bool insert_new = false;
    for (vector<int>& i : intervals) {
        if (insert_new || i[1] < newInterval[0]) {
            res.push_back(i);
        } else if (i[0] > newInterval[1]) {
            if (!insert_new) {
                res.push_back(newInterval);
                insert_new = true;
            }
            res.push_back(i);
        } else {
            newInterval[0] = min(newInterval[0], i[0]);
            newInterval[1] = max(newInterval[1], i[1]);
        }
    } 
    if (!insert_new) res.push_back(newInterval);
    return res;
}
56. Merge Intervals

Last updated

Was this helpful?