57. Insert Interval
Difficulty: Hard
Topics: Array, Sort
Similar Questions:
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;
}
};