在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。

一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的弓箭的最小数量。

Example:

输入: [[10,16], [2,8], [1,6], [7,12]]

输出: 2

解释: 对于该样例,我们可以在x = 6(射爆[2,8],[1,6]两个气球)和 x = 11(射爆另外两个气球)。

贪心规律如下:
1.对于某个气球,至少需要使用1只弓箭将它击穿。
2.在这只气球将其击穿的同时,尽可能击穿其他更多的气球

算法思路:

  1. 对各个气球进行排序,按照气球的左端点从小到大排序。
  2. 遍历气球数组,同时维护一个射击区间,在满足可以将当前气球射穿的情况下,尽可能击穿更多的气球,每击穿一个新的气球,更新一次射 击区间(保证射击区间可以将新气球也击穿)。
  3. 如果新的气球没办法被击穿了,则需要增加一名弓箭手,即维护一个新 的射击区间(将该气球击穿),随后继续遍历气球数组

实现如下:

int findMinArrowShots(vector<vector<int>>& points) {if (points.size() == 0) {return 0;}sort(points.begin(),points.end(),cmp);int num = 1;int shoot_begin = points[0][0];int shoot_end = points[0][1];for (int i = 1; i < points.size(); ++i) {//随着气球数量的递增,区间不断缩小if(shoot_end >= points[i][0]) {shoot_begin = points[i][0];if (shoot_end > points[i][1]) {shoot_end = points[i][1];}} else {//当发现区间的end 小于气球的起始边界,则重新划分区间,箭的数量增加num ++;shoot_begin = points[i][0];shoot_end = points[i][1];}}return num;
}

leetcode-452 用最少数量的箭引爆气球相关推荐

  1. Java实现 LeetCode 452 用最少数量的箭引爆气球

    452. 用最少数量的箭引爆气球 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够 ...

  2. 贪心法—LeetCode 452 用最少数量的箭引爆气球

    用最少数量的箭引爆气球 题目: 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了 ...

  3. LeetCode 452 用最少数量的箭引爆气球

    题目描述 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开 始和结束坐标.由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标 就足够了.开始坐标总是小于 ...

  4. leetcode 452. 用最少数量的箭引爆气球(贪心算法)

    在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了.开始坐标总是小于结束坐标. 一 ...

  5. 2022-4-12 Leetcode 452.用最少数量的箭引爆气球

    找到最长的重叠区间 // class Solution {// public: // int findMinArrowShots(vector<vector<int>>& ...

  6. Suzy想吃烤蛋挞了Day35 | 贪心算法进行时:860. 柠檬水找零,406. 根据身高重建队列,452. 用最少数量的箭引爆气球

    860. 柠檬水找零 solution 不要漏掉的一种情况是:如果收到了20,可以找10+5,或者5+5+5 class Solution:def lemonadeChange(self, bills ...

  7. 代码随想录35——贪心:860柠檬水找零、406根据身高重建队列、452用最少数量的箭引爆气球

    文章目录 1.860柠檬水找零 1.1.题目 1.2.解答 2.406根据身高重建队列 2.1.题目 2.2.解答 3.452用最少数量的箭引爆气球 3.1.题目 3.2.解答 1.860柠檬水找零 ...

  8. 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间

    本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...

  9. 代码随想录算法训练营第35天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

    代码随想录算法训练营第35天|860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球 860.柠檬水找零 406. 根据身高重建队列 452. 用最少数量的箭引爆气球 860. ...

  10. leetcode 452. Minimum Number of Arrows to Burst Balloons | 452. 用最少数量的箭引爆气球(左程云:最大线段重合问题)

    题目 https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons/ 题解 重叠区间问题可以总结为在坐标轴上若干个位 ...

最新文章

  1. php kint调试,PHP调试助手
  2. 服务器系统加速,系统加速技巧:让Linux启动更加快速
  3. ES6新增数据类型符号(1):普通符号
  4. aspects_具有Aspects的Java中的Mixin –用于Scala特性示例
  5. 基于嵌入式操作系统VxWorks的多任务并发程序设计――中断与任务
  6. qtabwidget放大_Qt自定义弹窗屏蔽父窗口(QWidget设置setWindowModality(Qt::ApplicationModal);以后再show)...
  7. leetcode链表篇
  8. linux java url 异常_java异常处理总结
  9. java 父类 new 子类
  10. 现在的孩子太厉害了阿(老朱语:长江后浪推前浪)
  11. IBM ServerGuide引导安装指南
  12. asp html5 ajax,ASP – AJAX 与 ASP | 菜鸟教程
  13. 主成分分析法原理与MATLAB实现
  14. 域名可以用多久_一个域名能用多少年
  15. Java基础篇---练习:类的设计
  16. wordpressCMS插件-全套wordpressCMS插件免费
  17. 【Vue实战】使用vue-admin-template模板开发后台管理
  18. 溢出英语计算机,查看溢出(简述计算机溢出原理)
  19. struggle in SVS Caffe environment
  20. 计算机科学与技术高校毕业生要求,计算机科学与技术专业 毕业要求(2016)

热门文章

  1. MySQL 存储过程传参之in, out, inout 参数用法
  2. 最好的程序界面就是用户无需去阅读操作手册就知道该如何使用的界面
  3. centos6.5 php5.2,Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)
  4. 大数加法【HDU 1002】
  5. OpenCV+python:圆检测
  6. usaco Home on the Range
  7. linux自带的cd刻录,linux下刻录CDROM的命令
  8. 苹果硬盘容量启动linux,你的MAC OS之旅
  9. java获取当月1号 的时间chuo_java 获取昨天,上个星期一,本月开始时间戳,怎么写呢?...
  10. PTA ---结构错题汇总