You may assume that the intervals were initially sorted according to their start times.
Copy Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[1,5],[6,9]]
Copy 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].
Copy 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;
}