所谓区间合并就是把有交集的区间范围合并成一个区间
803. 区间合并
思路:
由这个题来介绍一下区间合并的具体实现
首先看题目,题目的意思求合并之后,有几个不相交的区间
1.所以可以将区间按左区间从小到大排序
2.合并:第二个区间的起点在第一个区间的范围里,则更新区间的右端点(取两个区间的最大值)
源码
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
typedef pair<int,int>PII;
int n;
vector<PII>segs;
void merge(vector<PII> &segs){
vector<PII> res;
sort(segs.begin(),segs.end());
int st=-2e9,ed=-2e9;
for(int i=0;i<segs.size();i++){
if(ed<segs[i].first){
if(st!=-2e9) res.push_back({st,ed});//初始不为空,则加入
st =segs[i].first,ed=segs[i].second;
}
else ed=max(ed,segs[i].second);
}
if(st!=-2e9) res.push_back({st,ed}); //判断只有一个的情况
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()<<endl;
}