当前位置:网站首页>leetcode刷题笔记 452. Minimum Number of Arrows to Burst Balloons (Medium) 452.用最少数量的箭引爆气球(中等)
leetcode刷题笔记 452. Minimum Number of Arrows to Burst Balloons (Medium) 452.用最少数量的箭引爆气球(中等)
2022-07-29 05:24:00 【露忆丶十二】
1.题目描述:
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。弓箭一旦被射出之后,可以无限地前进。给你一个数组 points ,返回引爆所有气球所必须射出的最小弓箭数 。
示例 1:
输入:points = [[10,16],[2,8],[1,6],[7,12]]
输出:2
解释:气球可以用2支箭来爆破:
-在x = 6处射出箭,击破气球[2,8]和[1,6]。
-在x = 11处发射箭,击破气球[10,16]和[7,12]。
示例 2:
输入:points = [[1,2],[3,4],[5,6],[7,8]]
输出:4
解释:每个气球需要射出一支箭,总共需要4支箭。
示例 3:
输入:points = [[1,2],[2,3],[3,4],[4,5]]
输出:2
解释:气球可以用2支箭来爆破:
- 在x = 2处发射箭,击破气球[1,2]和[2,3]。
- 在x = 4处射出箭,击破气球[3,4]和[4,5]。
2.代码:
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
if(points.empty()){
return 0;
}
//为什么不能用两个#if 0 中的内容代替#if 1中的内容 ,按道理说不是速度更快?
#if 1
sort(points.begin(), points.end(), [](const vector<int> &a, const vector<int> &b){
return a[1] < b[1];
});
#endif
#if 0
sort(points.begin(), points.end(), cmp);
#endif
int count = 1;
int prev = points[0][1];
for(int i = 1; i < points.size(); ++i){
if(points[i][0] > prev){
++count;
prev = points[i][1];
}
}
return count;
}
#if 0
static bool cmp(const vector<int> &a, const vector<int> &b){
return a[1] < b[1];
}
#endif
};3.解题思路:
既然要用最少的箭来打穿所有的气球,那么每支箭都要尽可能多的打穿气球(局部最优组成全局最优),这样最后用的箭的数量一定是最少的。
通过这个图,在箭头左右移动的时候,只有这个位置是可以穿过四个气球或者更多气球,达到局部最优的效果,这个位置取决于右边界最小的气球。所以,只需要把气球按照右边界升序排列,确定第一支箭的位置后(第一个气球的右边界,假设坐标是x1),就可以把其他右边界大于x1,左边界小于x1的气球全部穿过,剩下的气球重复操作就可以了。
4.代码部分
@.对于sort传入参数,我写了两种:
第一种是#if 1中的内容关键在于第三个参数是匿名函数,匿名函数的格式为:[外部变量访问方式说明符](参数表) ->返回值 {语句体}。说明符有两种:第一种 = 不允许改变语句体外定义的变量的值;第二种 & 允许改变语句体外定义的变量的值。
第二种是两个#if 0中的内容,自定义函数必须是static类型的,因为sort()函数要求参数是静态的,我个人认为应该是这种方式运行速度更快,我也翻阅了一些其他人的博客也是这么说,但是在leetcode上检验时却是第一种方式运行速度快些,将近100ms的领先,希望看到这的朋友解答一下。
边栏推荐
- FPGA based: multi-target motion detection (hand-in-hand teaching ①)
- Ml4 self study notes
- 2022暑初二信息竞赛学习成果分享2
- 新能源充电桩后台管理系统平台
- 一些工具,插件,软件链接分享给大家~
- Reading papers on false news detection (I): fake news detection using semi supervised graph revolutionary network
- Fasttext learning - text classification
- NoClassDefFoundError 处理
- STM32 串口乱码
- 基于wifi的温度采集与控制系统
猜你喜欢

Ml6 self study notes

Transformer review + understanding

【软件工程之美 - 专栏笔记】21 | 架构设计:普通程序员也能实现复杂系统?

【软件工程之美 - 专栏笔记】26 | 持续交付:如何做到随时发布新版本到生产环境?

Based on stc51: schematic diagram and source code of four axis flight control open source project (entry-level DIY)

【软件工程之美 - 专栏笔记】23 | 架构师:不想当架构师的程序员不是好程序员

Am model in NLP field

基于51单片机的DAC0832波形发生器

STM32 MDK(Keil5) Contents mismatch错误总结

物联网倾斜监测解决方案
随机推荐
基于51单片机的四路抢答器仿真
STM8S003国产替代 DP32G003 32 位微控制器芯片
Power electronics: single inverter design (matlab program +ad schematic diagram)
Reading papers on false news detection (5): a semi supervised learning method for fake news detection in social media
Huawei cloud 14 day Hongmeng device development -day7wifi function development
SimpleFOC+PlatformIO踩坑之路
基于msp430f2491的proteus仿真
CS4344国产替代DP4344 192K 双通道 24 位 DA 转换器
新能源充电桩后台管理系统平台
Ml self study notes 5
NOI Online 2022普及组 题解&个人领悟
EPS32+Platform+Arduino 跑马灯
【RoboMaster】从零开始控制RM电机(2)-CAN通信原理及电调通信协议
传统模型预测控制轨迹跟踪——圆形轨迹(功能包已经更新)
基于stm32的四针OLED显示
Joiner.on和stream().map联合使用技巧
Ml6 self study notes
SimpleFOC调参2-速度、位置控制
Rowkey设计
低功耗蓝牙5.0芯片nrf52832-QFAA