模拟插入流程即可,但是有些细节需要处理
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> ans;
int size = intervals.size();
if(size == 0){
ans.push_back(newInterval);
return ans;
}
//寻找左边界
int i = 0;
while(i < size && intervals[i][1] < newInterval[0]){
ans.push_back(intervals[i]);
i++;
}
//while因为i<size时中断,这时直接插入最后即可结束
if(i == size){
ans.push_back(newInterval);
}else{
vector<int> newVec(2);
//判断左边界
newVec[0] = (intervals[i][0] < newInterval[0]) ? intervals[i][0] : newInterval[0];
//确定位置
while(i < size && intervals[i][1] < newInterval[1]){
i++;
}
//因为i<size中断
if(i == size ){
newVec[1] = newInterval[1];
}else if(i < size){
//判断右边界
newVec[1] = (newInterval[1] < intervals[i][0]) ? newInterval[1] : intervals[i][1];
}
ans.push_back(newVec);
//这个时候不需要再处理intervals[i]了
if(i < size && newInterval[1] >= intervals[i][0]) i++;
while(i < size) ans.push_back(intervals[i++]);
}
return ans;
}
};