C++题解
这个题目考察的是区间合并
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<int, int>PII;
void merge(vector<PII>& segs)
{
vector<PII> res;
sort(segs.begin(), segs.end());//将区间按左端点大小排序
int st = -2e9, ed = -2e9;//给左端点和右端点做初始化
for(auto seg : segs)
{
if(ed < seg.first)//表示两个区间没有交集
{
if(st != -2e9) res.push_back({st, ed});//确保不是初始化区间
st = seg.first, ed = seg.second;//继续下一个区间
}else
{
ed = max(ed, seg.second);//将包含与有交集但不是包含的关系统一
}
}
if(st != -2e9) res.push_back({st, ed});//确保不是初始化区间
segs = res;
}
int main()
{
int n;
cin>>n;
vector<PII> segs;
for(int i = 0; i < n; i++)
{
int l, r;
cin>>l>>r;
segs.push_back({l, r});
}//遍历输入所有区间
merge(segs);
cout<<segs.size()<<endl;
return 0;
}