Leetcode452. 用最少数量的箭引爆气球(排序+贪心)
问题描述
在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。
一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的弓箭的最小数量。
给你一个数组 points ,其中 points [i] = [xstart,xend] ,返回引爆所有气球所必须射出的最小弓箭数。
示例 1:
输入:points = [[10,16],[2,8],[1,6],[7,12]]
输出:2
解释:对于该样例,x = 6 可以射爆 [2,8],[1,6] 两个气球,以及 x = 11 射爆另外两个气球
示例 2:
输入:points = [[1,2],[3,4],[5,6],[7,8]]
输出:4
示例 3:
输入:points = [[1,2],[2,3],[3,4],[4,5]]
输出:2
示例 4:
输入:points = [[1,2]]
输出:1
示例 5:
输入:points = [[2,3],[2,3]]
输出:1
提示:
0 <= points.length <= 104
points[i].length == 2
-231 <= xstart < xend <= 231 - 1
代码
思路1:按照第一个数排序
class Solution {public int findMinArrowShots(int[][] points) {if(points==null||points.length==0)return 0;Arrays.sort(points, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if (o1[0]==o2[0]) { if(o1[1]>o2[1])return 1;if(o1[1]<o2[1]) {return -1;}return 0;}if(o1[0]<o2[0])return -1;return 1;}});int num=1;int end=points[0][1];for(int i=1;i<points.length;i++) {if(points[i][1]<end) {end=points[i][1];}if(points[i][0]>end) {end=points[i][1];num++;}}return num;}
}
思路2:按照第二个数排序
class Solution {public int findMinArrowShots(int[][] points) {if(points==null||points.length==0)return 0;Arrays.sort(points, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if(o1[1]<o2[1])return -1;return 1;}});int num=1;int end=points[0][1];for(int i=1;i<points.length;i++) {if(points[i][0]>end) {end=points[i][1];num++;}}return num;}
}
Leetcode452. 用最少数量的箭引爆气球(排序+贪心)相关推荐
- leetcode-452 用最少数量的箭引爆气球
在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐标总是小于结束坐标.平面 ...
- leetcode452. 用最少数量的箭引爆气球
在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐标总是小于结束坐标.平面 ...
- leetcode 452. 用最少数量的箭引爆气球(贪心算法)
在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了.开始坐标总是小于结束坐标. 一 ...
- 贪心法—LeetCode 452 用最少数量的箭引爆气球
用最少数量的箭引爆气球 题目: 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了 ...
- c语言贪心算法合并箭,贪心算法:用最少数量的箭引爆气球
❝ 通知:一些录友表示经常看不到每天上午的文章,现在公众号已经不按照发送时间推荐了,而是根据一些规则乱序推送,所以可能关注了「代码随想录」也一直看不到文章,建议把「代码随想录」设置星标哈,设置星标之后 ...
- Suzy想吃烤蛋挞了Day35 | 贪心算法进行时:860. 柠檬水找零,406. 根据身高重建队列,452. 用最少数量的箭引爆气球
860. 柠檬水找零 solution 不要漏掉的一种情况是:如果收到了20,可以找10+5,或者5+5+5 class Solution:def lemonadeChange(self, bills ...
- 2021.05.20最少数量的箭引爆气球
2021.05.20最少数量的箭引爆气球 题目描述 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以纵坐标并不重要,因此只要知道开始和 ...
- 代码随想录35——贪心:860柠檬水找零、406根据身高重建队列、452用最少数量的箭引爆气球
文章目录 1.860柠檬水找零 1.1.题目 1.2.解答 2.406根据身高重建队列 2.1.题目 2.2.解答 3.452用最少数量的箭引爆气球 3.1.题目 3.2.解答 1.860柠檬水找零 ...
- 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间
本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...
- Java实现 LeetCode 452 用最少数量的箭引爆气球
452. 用最少数量的箭引爆气球 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够 ...
最新文章
- 初次体验hiphop-php
- 全球缺芯大潮中,以软代硬能否另辟蹊径?
- Microbiome:山大杜宗军团队揭示捕食性细菌新类群-慢生单胞菌目细菌独特的生境适应性...
- 成功解决pandas读取文件中不读取第一索引列
- xampp mysqli_query and后的条件不行_Java笔记不用!null作为判空条件
- MONGODB 集群架构 调整,增加延迟备份节点服务器,删除仲裁节点
- [引]生成加密和解密的密钥
- linux服务器监控zabbix,Linux监控之--使用ZABBIX监控web服务器
- Python自然语言处理 8 分析句子结构
- 48 Fixing relationship Problems with Humor 用幽默解决人际关系问题
- 蘑菇街防重复请求处理的实践与总结
- 复旦学子《可解释机器学习》中文版火了,完整PDF开发下载!
- verilog中always和initial的区别
- 华为云WeLink是什么软件?什么远程办公软件好用?
- 自学虚幻引擎图文笔记:如何在UE4中做积雪材质
- matlab图像拼接融合(四种方法)
- rabbitMQ的详细介绍
- 民航客运量变化趋势的多元线性回归模型--基于R(附R程序及讲解)
- SimpleDateFormat 参数
- ios 专业制作马甲包、解决审核不通过的各种疑难杂症
热门文章
- Oracle归档模式与非归档模式设置
- Linux 内核全系更新 3.6.2、3.5.7 等
- 如何去除图片连接的边框线
- AJAX 框架Jquery的使用方法
- bootstrap table 小计行_【2018/4/11】bootstrapTable添加一行
- 拓端tecdat|R语言连续时间马尔可夫链模拟案例 Markov Chains
- 拓端tecdat|sas神经网络:构建人工神经网络模型来识别垃圾邮件
- 初识循环神经网络(RNN)
- cannot import name ‘Imputer‘ from ‘sklearn.preprocessing‘
- 一个react项目案例02 注册和登陆实现原理分析