是不是有点熟悉,这其实就是上一道题的变形。首先他给出的数组为无重叠的,所以我们仅仅需要考虑的就是如何插入newIntervals,插入区间的位置只有三种可能,一种是在给定数组任意一区间的左边,一种是在给定区间的数组任意区间的右边,还有一种就是存在重叠。前面两种情况很任意考虑,最后一种情况我们只需要在重叠的区间里面找到最小的作为区间的左端点,最大的作为区间的右端点。思路既然有代码如下:
遍历到插入区间左端点大于给定右端点,这时将前面的区间都加入到result中,再讲其进行比较,取大的作为右端点,小的作为左端点,加入到结果中,最后将剩下的数组加入到数组中。
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> result;
int index = 0;
while(index < intervals.size() && intervals[index][1] < newInterval[0]){
result.push_back(intervals[index++]);
}
while(index < intervals.size() && intervals[index][0] <= newInterval[1]){
newInterval[0] = min(intervals[index][0],newInterval[0]);
newInterval[1] = max(intervals[index][1],newInterval[1]);
index++;
}
result.push_back(newInterval);
while(index < intervals.size()){
result.push_back(intervals[index++]);
}
return result;
}
};