题目
思路
与56基本一致,只是先把newInterval加入到intervals中
- 把newInterval加入到intervals中
- 对intervals二维数组按照第一维大小升序排序
- 循环遍历,若intervals[i][0]大于等于rets[j][0] 并且 小于等于rets[j][1]则需要进行合并,更新rets[j][1]即可(rets是待返回的二维数组)
- 反之,rets中无此小区间,将其加入rets中
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
static bool cmp(vector<int> &x1, vector<int> &x2){
return x1[0] < x2[0];
}
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
intervals.emplace_back(newInterval);
sort(intervals.begin(), intervals.end(), cmp);
int num=intervals.size();
vector<vector<int>> rets;
for(int i=0;i<num;i++){
int flag=0;
for(int j=0;j<rets.size();j++){
if(intervals[i][0]>=rets[j][0] && intervals[i][0]<=rets[j][1]){
if(intervals[i][1]>rets[j][1])
rets[j][1]=intervals[i][1];//此小区间被覆盖
flag=1;
break;
}
}
if(flag==0) rets.emplace_back(vector<int>{
intervals[i][0], intervals[i][1]});
}
return rets;
}
int main() {
int num;//区间数量
cin>>num;
vector<vector<int>> intervals(num);
for(int i=0;i<num;i++){
intervals[i].reserve(2);
cin>>intervals[i][0]>>intervals[i][1];
}
vector<int> newInterval(2);
cin>>newInterval[0]>>newInterval[1];
vector<vector<int>> rets=insert(intervals, newInterval);
for(int i=0;i<rets.size();i++){
cout<<rets[i][0]<<","<<rets[i][1]<<" ";
}
return 0;
}