57. 插入区间
自己做
解:归并解法
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> res;
int i = 0;
bool is_insert = false; //标记是否已经插入
while(i < (int)intervals.size()){
if(!is_insert){ //未插入的情况下
if(intervals[i][0] < newInterval[0]){ //区间数组中的区间开头更小,插入数组的区间
if(res.size() == 0) //针对开头第一个区间:如果结果为空,直接插入
res.push_back(intervals[i]);
else{ //结果不为空,要检查插入的区间是否和结果中的区间有包含
if(res[(int)res.size() - 1][1] >= intervals[i][0]){ //要合并的情况
if(res[(int)res.size() - 1][1] < intervals[i][1]) //如果不为包含关系就更新,否则如果为包含关系就不更新
res[(int)res.size() - 1][1] = intervals[i][1];
i++;
}
else //不需要合并的情况,直接插入
res.push_back(intervals[i++]);
}
}
else{ //新区间开头更小
if(res.size() == 0) //针对开头第一个区间:如果结果为空,直接插入
res.push_back(newInterval);
else{ //结果不为空,要检查插入的区间是否和结果中的区间有包含
if(res[(int)res.size() - 1][1] >= newInterval[0]){ //要合并的情况
if(res[(int)res.size() - 1][1] < newInterval[1]) //如果不为包含关系就更新,否则如果为包含关系就不更新
res[(int)res.size() - 1][1] = newInterval[1];
}
else //不需要合并的情况,直接插入
res.push_back(newInterval);
}
is_insert = true; //标记已插入
}
}
else{ //已经插入的情况下
//结果必然不为空,现在要检查插入的区间是否和结果中的区间有包含
if(res[(int)res.size() - 1][1] >= intervals[i][0]){ //要合并的情况
if(res[(int)res.size() - 1][1] < intervals[i][1]) //如果不为包含关系就更新,否则如果为包含关系就不更新
res[(int)res.size() - 1][1] = intervals[i][1];
i++;
}
else //不需要合并的情况,直接插入
res.push_back(intervals[i++]);
}
}
if(!is_insert) //针对区间数组为空的情况
if(res.size() == 0) //针对开头第一个区间:如果结果为空,直接插入
res.push_back(newInterval);
else{ //结果不为空,要检查插入的区间是否和结果中的区间有包含
if(res[(int)res.size() - 1][1] >= newInterval[0]){ //要合并的情况
if(res[(int)res.size() - 1][1] < newInterval[1]) //如果不为包含关系就更新,否则如果为包含关系就不更新
res[(int)res.size() - 1][1] = newInterval[1];
}
else //不需要合并的情况,直接插入
res.push_back(newInterval);
}
return res;
}
};