题目要求
主要思路
主要采用的就是贪心的思想,首先以每一段的右端点为判断依据,通过重定义排序规则,使得排序规则是以右端点的大小来排序,然后通过遍历整个数组,如果左端点小于当前指定标志位端点,说明这段是在点的内部范围内的,就忽略,如果不是在当前指定标志位端点,那么就记录端点数加一,同时更新标志位端点为当前右端点。
源码展示
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
struct Range
{
int l,r;
bool operator < (const Range &W) const
{
return r < W.r;
}
}range[N];
int main()
{
int n;
cin >> n;
for (int i = 0 ; i < n ; i++)
{
scanf("%d%d",&range[i].l,&range[i].r);
}
sort(range,range+n);
int res = 0 , ed = -2e9;
for(int i = 0 ; i < n ; i++)
{
if(range[i].l > ed)
{
res++;
ed = range[i].r;
}
}
printf("%d",res);
}