思路
1.按左端点排序
2.排序后遍历,下一个区间的左端点是否和在上一个区间里面,在的话就合并
C++ 代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct P{
int l, r;
};
int cmp(P a, P b){
return a.l < b.l;
}
vector<P> p;
int main(){
int n;
cin >> n;
for(int i=0;i<n;i++){
int l,r;
cin >> l >> r;
p.push_back({l,r});
}
sort(p.begin(),p.end(),cmp);
for(int i=0;i<p.size()-1;i++){
if(p[i+1].l<=p[i].r && p[i+1].l >= p[i].l){
p[i+1].l=min(p[i+1].l,p[i].l);
p[i+1].r=max(p[i+1].r,p[i].r);
n--;
};
}
cout << n << endl;
}