题目描述
给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。
输出选择的点的最小数量。
位于区间端点上的点也算作区间内。
样例描述
输入格式
第一行包含整数 N,表示区间数。
接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。
输出格式
输出一个整数,表示所需的点的最小数量。
数据范围
1≤N≤105,
−109≤ai≤bi≤109
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
思路
- 将每个区间按右端点从小到大排序
- 用结构体来表示区间,然后重载运算符
<
实现基于右端点排序 - 从前往后依次枚举每个区间,如果当前区间的右端点不在后面区间内(具体就是比较当前区间的右端点是否小于下一个区间的左端点,若小于则说明两个区间没有交集),则要新选一个点
- 结构体排序那块也可以不重载运算符
<
,而是通过自定义排序函数如下
bool compare(Range a, Range b){
return a.r < b.r;
}
然后在调用sort
时添加这个函数参数即可,sort(range, range + n, compare);</