905. 区间选点
给定 N 个闭区间 [ai,bi][a_i,b_i][ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。
输出选择的点的最小数量。
位于区间端点上的点也算作区间内。
第一行包含整数 N,表示区间数。
接下来 N 行,每行包含两个整数 ai,bia_i,b_iai,bi,表示一个区间的两个端点。
输出一个整数,表示所需的点的最小数量。
- 1≤N≤1051≤N≤10^51≤N≤105
- −109≤ai≤bi≤109-10^9≤a_i≤b_i≤10^9−109≤ai≤bi≤109
3
-1 1
2 4
3 5
2
贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。

Tips
//定义结构体
struct Type{int a;double b;//升序需要的操作符函数bool operator < (const Type& right) const {return a < right.a;}//asscend//降序需要的操作符函数bool operator > (const Type& right) const{return a > right.a;}//descend
};
#include
#include using namespace std;const int N = 100010;
int n;struct Range {int l, r;bool operator < (const Range &W) const {return r < W.r;};
}range[N];int main() {cin >> n;for(int i = 0; i < n; i++) {int l, r;cin >> l >> r;range[i] = {l, 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;}cout << res;return 0;
}
上一篇:通关算法题之 ⌈二叉树⌋ 下