905. 区间选点

文章目录

  • 题目描述
    • 输入格式:
    • 输出格式:
    • 数据范围
    • 输入样例
    • 输出样例
  • 方法:贪心
    • 解题思路
    • 代码
    • 复杂度分析:

题目描述

给定 N 个闭区间 [ a i , b i ] [a_i,b_i] [ai​,bi​],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。

输出选择的点的最小数量。

位于区间端点上的点也算作区间内。

输入格式:

第一行包含整数 N,表示区间数。

接下来 N 行,每行包含两个整数 a i , b i a_i,b_i ai​,bi​,表示一个区间的两个端点。

输出格式:

输出一个整数,表示所需的点的最小数量。

数据范围

  • 1 ≤ N ≤ 1 0 5 1≤N≤10^5 1≤N≤105
  • − 1 0 9 ≤ a i ≤ b i ≤ 1 0 9 -10^9≤a_i≤b_i≤10^9 −109≤ai​≤bi​≤109

输入样例

3
-1 1
2 4
3 5

输出样例

2

方法:贪心

解题思路

贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。

  1. 将所有区间按右端点从小到大排序
  2. 维护点设置为负无穷,依次搜索每个区间
    如果新区间的左端点 > 维护点,则将维护值更新成新区间的右端点;
    如果新区间的右端点 <= 维护点,则说明维护点也在这个新区间内。

Tips

  • 这里保存区间的左右端点采用了 struct 类型,按区间右端点进行排序需要对 struct 类型的数组自定义排序
//定义结构体
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 <iostream>
#include <algorithm>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;
}

复杂度分析:

  • 时间复杂度: O ( n l o g 2 n ) O(nlog_2n) O(nlog2​n)
  • 空间复杂度: O ( n ) O(n) O(n)

【贪心】AcWing 803. 区间选点相关推荐

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

    [AcWing] 905. 区间选点(C++实现)贪心---区间问题例题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. ...

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

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

  3. AcWing 905. 区间选点(贪心)

    题目链接 https://www.acwing.com/problem/content/907/ 思路 我们用pair<int,int>来存储每一个区间的两个端点,然后按照右区间从小到大排 ...

  4. Algorithm:贪心策略之区间选点问题

    Describe:在数轴上标点,使得该点能够被区间覆盖,并要求对应区间最少覆盖Ki个点,求最少标多少个点保证满足要求,同一个位置不能重复: Input: 第一行输入区间个数 n 后面n行输入对应区间的 ...

  5. Acwing 905. 区间选点

    1.将每个区间按照右端点从小到大排序 2.从前往后依次枚举每个区间 如果当前区间中已经包含点,则直接pass 否则,选择当前区间的右端点 #include <iostream> #incl ...

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

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

  7. ACM - 贪心 - 基础(区间问题 + Huffman树 + 排序不等式 + 绝对值不等式 + 推公式)

    贪心 经典母题 1.区间问题 AcWing 905. 区间选点 AcWing 908. 最大不相交区间数量 AcWing 906. 区间分组 AcWing 907. 区间覆盖 2.Huffman树 A ...

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

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

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

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

最新文章

  1. 锐捷交换机批量加入vlan_大型网络中如何创建vlan? 不同vlan间如何互通?
  2. [GRYZ2015]快排练习
  3. SQL语言包含4个部分
  4. 用 Go 语言实现 Raft 选主
  5. 国内CRM市场的运作猜想
  6. B站COO李旎:超2000万人在B站看纪录片
  7. 树莓派+docker+tensorflow
  8. [转载] Python3 如何检查字符串是否是以指定子字符串开头或结尾
  9. 2006 年100 款最佳安全工具谱
  10. 天津成人高考计算机基础知识题库,天津市成考《计算机基础考试大纲》(高中起点)...
  11. 用计算机运算符编写检索式,检索式
  12. wps怎么做时间线_wps中的word文档如何制作时间轴
  13. 对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会(转)...
  14. repo clean
  15. 手机远程计算机桌面,远程桌面预览Windows10,您可以远程通过手机控制电脑
  16. 区块链交易——举例说明
  17. HTML中的span是什么意思
  18. 基于Linux系统部署新世纪版五笔输入法
  19. 4 款超级好用的终端文件管理器
  20. python 二维码生成与识别

热门文章

  1. python正则表达式(2)
  2. 数学建模-灰色预测模型(预测模型)
  3. 跨境电商独立站流量起飞!社媒 Hashtags 营销全攻略!
  4. LINUX内核编译(ZT)
  5. JS window.open()打开新窗口、监听页面打开关闭状态(详细)
  6. 广州、深圳NPDP认证考试取消通知
  7. 【文献阅读笔记】CVX使用常用替换公式
  8. 谷歌网页插件实现优雅(bushi)刷力扣
  9. vue.config.js中lintOnSave配置
  10. 2021-05-01Java面试知识点