题目
请点击
思路
- 先对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>> merge(vector<vector<int>>& intervals) {
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<vector<int>> rets=merge(intervals);
for(int i=0;i<rets.size();i++){
cout<<rets[i][0]<<","<<rets[i][1]<<" ";
}
return 0;
}