使用结构体进行的实现,较便利地得到了答案,但是并没有得到合并后的区间
C++ 代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
int n,ans = 1;
struct side
{
int start;
int end;
}q[N];
bool cmp(side a, side b) //cmp函数用于排序,将区间按左端点从小到大进行排序,左端点相同则按右端点从小到大进行排序
{
if (a.start == b.start) return a.end < b.end;
else return a.start < b.start;
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> q[i].start >> q[i].end;
sort(q, q + n, cmp);
for (int i = 0; i < n-1; i++) //注意此处i < n-1
{
if (q[i + 1].end <= q[i].end) q[i + 1].start = q[i].start, q[i + 1].end = q[i].end; //如果下一个区间的右端点小于或等于当前区间右端点,将下一个区间更新为当前区间
else if (q[i + 1].start <= q[i].end) q[i + 1].start = q[i].start;//当下一个区间的右端点大于当前区间右端点时,若下一个区间的左端点小于或等于当前区间右端点,将下一个区间的左端点更新为当前区间左端点
else ans++; 都不是,则让ans+1
}
cout << ans;
return 0;
}