这里找一个配图去分析:
分析:注意这里只是合并一个区间。
1.就是按照上面这样:
显然直接将蓝色的区间放到答案数组里
2.如果这种情况排除后,那么此时while应该就是存在交集的部分,那么更新新的区间。
类似于这样子。
3.(请读清除题目,这里插入的仅仅是一个区间),那么后面的情况之后处理到边界情况就可以了。因为都是单调递增的不连续区间。
代码如下:
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
//没关系的区间先放到答案容器中
vector<vector<int>> ans;
int idx=0,len=intervals.size();
//不相交的情况,处理完之后进行下一个
while(idx<len&&intervals[idx][1]<newInterval[0]) ans.push_back(intervals[idx++]);
//相交的情况,其实该情况需要建立在前面的基础上。因为前面已经不相加了,所以这是相交的情况
while(idx<len&&intervals[idx][0]<=newInterval[1]){
//更新新区间的左右端点值
newInterval[0]=min(intervals[idx][0],newInterval[0]);
newInterval[1]=max(intervals[idx][1],newInterval[1]);
idx++;
}
//将区间合并的集合放入答案数组中
ans.push_back(newInterval);
//还有最后一种情况:因为之后插入了一个新的区间(而题目已经指定了给了一个新区间进行合并)。如何区间之后,全都是离散不相交区间
while(idx<len) ans.push_back(intervals[idx++]);
return ans;
}
};
其实从整体来,就是讲区间合并一下,初中生应该都知道。但是边界处理上比较麻烦。