57. Insert Interval

Problem:

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].

NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

Solutions:

class Solution {
public:
    vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
        vector<vector<int>> ret;
        int i = 0;
        for (; i < intervals.size(); ++i) {
            if (intervals[i][1] < newInterval[0])   {
                ret.push_back(intervals[i]);
            } else {
                break;
            }
        }

        if (i == intervals.size()) {
            ret.push_back(newInterval);
            return ret;
        }

        if (newInterval[1] < intervals[i][0]) {
            ret.push_back(newInterval);
            ret.push_back(intervals[i]);
        } else {
            ret.push_back({min(newInterval[0], intervals[i][0]), max(newInterval[1], intervals[i][1])});
        }

        ++i;

        for (; i < intervals.size(); ++i) {
            if (ret.back()[1] < intervals[i][0]) {
                ret.push_back(intervals[i]);
            } else {
                ret.back()[1] = max(ret.back()[1], intervals[i][1]);
            }
        }

        return ret;

    }
};

results matching ""

    No results matching ""