[AcWing] 905. 区间选点(C++实现)贪心---区间问题例题

  • 1. 题目
  • 2. 读题(需要重点注意的东西)
  • 3. 解法
  • 4. 可能有帮助的前置习题
  • 5. 所用到的数据结构与算法思想
  • 6. 总结

1. 题目

2. 读题(需要重点注意的东西)

思路:

贪心 -----> 每次在当前的选法中,选择能选的情况中的最优解

解题思路:先将每个区间按右端点从小到大排序,然后每次枚举每个区间,当某个区间内已经取了点时,直接跳过即可,否则取每个区间最右端的端点。


代码实现思路:

3. 解法

---------------------------------------------------解法---------------------------------------------------

#include <iostream>
#include <algorithm>using namespace std;const int N = 100010; // 最多有10w个区间int n;
// -----------------问题一:重载怎么理解?----------------------------
// 定义结构体range,重载小于号按右端点排序
// 结构体中保存每个区间的左端点l与右端点r
// range[0].l表示 输入的第1个区间的左端点,右端点的表示同理
struct Range
{int l, r;bool operator< (const Range &W)const{return r < W.r;}
}range[N];int main()
{scanf("%d", &n);// 读入n个区间for (int i = 0; i < n; i ++ ) scanf("%d%d", &range[i].l, &range[i].r);// 按右端点排序sort(range, range + n);// res表示当前点的数量,ed表示上一个区间的右端点int res = 0, ed = -2e9;for (int i = 0; i < n; i ++ )// 如果当前区间的左端点>上一个区间的右端点// 更新ed,res+1if (range[i].l > ed){res ++ ;ed = range[i].r;}printf("%d\n", res);return 0;
}

可能存在的问题(所有问题的位置都在上述代码中标注了出来)

问题一:重载怎么理解?
问题一回答:
我们在这里重载小于号的目的,是为了使用STL函数sort
sort()排序是基于大小顺序,从小到大来调整序列顺序。

如有一个数组:
int ans[] = {4 8 2 6};
sort(a,a+4) ; // 输出a得到 2 4 6 8

但是对于我们自定义的结构体Range,我们想让它们按右端点进行从小到大的排序,能够直接使用sort函数吗?

显然是不可能的,因为这个结构体中有左端点,有右端点,而sort函数不知道按哪个属性来进行排序。
这时就需要对小于号 < 进行重载,相当于给sort函数指定,就按我给定的return表达式进行排序。即:

    bool operator< (const Range &W)const{return r < W.r;}

4. 可能有帮助的前置习题

5. 所用到的数据结构与算法思想

  • 贪心

6. 总结

贪心思想、区间问题的例题,理解思想并自行推导出代码。

[AcWing] 905. 区间选点(C++实现)贪心---区间问题例题相关推荐

  1. 区间选点 and 最大不相交区间

    区间选点 题目描述 给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点. 输出选择的点的最小数量. 位于区间端点上的点也算作区间内. 输入输出及样例 最 ...

  2. 贪心法——区间选点问题

    贪心法--区间选点问题 区间选点问题.数轴上有nn个闭区间[ai,bi][a_i, b_i].取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个). 贪心思想:先按bb从小到大进 ...

  3. acwing 区间选点-java-贪心

    贪心算法 选择当前最好的情况走过去 (短视) 每次选择局部最优解 然后最后走到全局最优解 但是只能是单峰的情况下,才可以使用贪心 . 多峰的情况下 就通过这个够呛找到全局最优解. 两种模板(区间选点, ...

  4. 【48. 贪心(区间选点)】

    区间选点与最大不相交区间数量代码一样 思路 将每个区间按照右端点从小到大进行排序 从前往后枚举区间,end值初始化为无穷小 如果本次区间不能覆盖掉上次区间的右端点, ed < range[i]. ...

  5. 【贪心】AcWing 803. 区间选点

    905. 区间选点 文章目录 题目描述 输入格式: 输出格式: 数据范围 输入样例 输出样例 方法:贪心 解题思路 代码 复杂度分析: 题目描述 给定 N 个闭区间 [ a i , b i ] [a_ ...

  6. acwing 905 区间问题-区间选点

    Acwing 905. 区间选点 题目描述 给定 N 个闭区间 [ai,bi] ,请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点. 输出选择的点的最小数量. 位于区间端点上的点也算作区 ...

  7. 贪心算法——区间选点问题

    转载:https://blog.csdn.net/xia842655187/article/details/51944763 区间选点的问题大致可以描述为:  给定N个区间[a,b],取尽量少的点,使 ...

  8. NYOJ 287 Radar 贪心之 区间选点

    Radar 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Assume the coasting is an infinite straight line. Land ...

  9. 【贪心策略】区间选点问题

    问题描述: Description You are given n closed, integer intervals [ai, bi] and n integers c1,-, cn. Write ...

最新文章

  1. [导入]MsAjax Lib- Array.insert 函数
  2. PLC項目任務單2---狀態轉移圖
  3. SpringBoot集成Redis用法笔记
  4. PHP文字转语音合成网源码 百度API开发
  5. 计算机常见故障报警,常见听报警志与故障
  6. 远程连接SQL Server (转)
  7. 架构师软技能之协商(上)
  8. [PKUSC2018游记]
  9. 计算机控制v90伺服,西门子S7-1200控制V90伺服教程(TIA).pdf
  10. 直升机救援机制的发展
  11. CISP 考试教材《第 10 章 知识域:软件开发安全》知识整理
  12. 各家关节机器人示教器特点
  13. 使用PS让图片制作出渐变效果
  14. 软件测试的基础知识(四)
  15. 【linux内核分析与应用-陈莉君】动手实践--内核多任务并发实例
  16. 跳马周游c++_汉诺塔,n皇后,跳马问题汇总
  17. 【中文分词】 FMM BMM (python)
  18. C++ 什么时候调用析构函数和构造函数
  19. 关于My Sql如何导入数据
  20. UI设计师如何脱颖而出 面试过程中要注意什么

热门文章

  1. 2019年最新版嵌入式开发教程大纲免费分享
  2. 连接请求被计算机拒绝访问,Windows 10共享打印机解决方案被拒绝访问
  3. Python 爬金十数据
  4. 计算机网络哪个学校好厦门,厦门较好的的计算机学校有哪几间
  5. 面对不喜欢的工作,只有跳槽一条路吗?
  6. 视频APP源码,支持第三方支付,卡密充值,
  7. 企业邮箱地址怎么写你知道吗?这样的邮箱地址更专业
  8. 酒店网站建设需要多少钱
  9. 匆匆一面,此生无言(课余篇)
  10. C语言--自定义字符串输入/输出函数