区间合并
将所给区间中有交的合并为一个,返回合并后的区间
区间合并例题
例题答案:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> res;
if(intervals.size()==0)
return res ;
int st=-2e5;int ed=-2e5;
sort(intervals.begin(),intervals.end());
for(int i=0;i<intervals.size();i++){
int l=intervals[i][0];
int r=intervals[i][1];
if(ed<l){
if(ed!=-2e5){
res.push_back({st,ed});
}
st=l;ed=r;
}
else{
ed=max(ed,r);
}
}
res.push_back({st,ed});
return res;
}
};
区间合并参考代码:
#include <iostream>
#include <string>
using namespace std;
#include <vector>
#include <algorithm>
typedef pair<int,int> PII;
const int N=100010;
const int m=-2e7;
int n;
vector<PII> segs;
void merge(vector<PII>&segs){
vector<PII> res;
sort(segs.begin(),segs.end());
int l=m;
int r=m;
for(auto item:segs){
if(r<item.first){
if(r!=m)res.push_back({l,r});
l=item.first;
r=item.second;
}
else{
r=max(r,item.second);
}
}
res.push_back({l,r});
segs=res;
}
int main() {
cin>>n;
for(int i=0;i<n;i++){
int l,r;
cin>>l>>r;
segs.push_back({l,r});
}
merge(segs);
cout<<segs.size();
return 0;
}5