当前位置:网站首页>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的领先,希望看到这的朋友解答一下。
边栏推荐
- Hal library learning notes - 9 DMA
- 基于msp430f2491的proteus仿真
- 2022暑初二信息竞赛学习成果分享2
- 唯美girls
- 【软件工程之美 - 专栏笔记】24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?
- arduino uno错误分析avrdude: stk500_recv(): programmer is not responding
- 【软件工程之美 - 专栏笔记】16 | 怎样才能写好项目文档?
- STM32: mcnamu wheel tracking task (library function program code)
- Ml8 self study notes LDA principle formula derivation
- PHY6252是一款超低功耗物联网蓝牙无线通信芯片
猜你喜欢
【软件工程之美 - 专栏笔记】25 | 有哪些方法可以提高开发效率?
噪声传感器工作原理是什么?
FPGA based: moving target detection (schematic + source code + hardware selection, available)
HAL库学习笔记- 8 串口通信之概念
HAL学习笔记 - 7 定时器之高级定时器
【软件工程之美 - 专栏笔记】26 | 持续交付:如何做到随时发布新版本到生产环境?
shell工具finalShell
markdown与Typora
Pit avoidance: about the interconnection of two hc-05 master-slave integrated Bluetooth modules, there is no connection problem
scanBasePackages扫包范围配置
随机推荐
噪音监测传感系统
NoClassDefFoundError 处理
智慧充电桩系统由什么组成?
动态加载数据
Jingwei Qili: OLED character display based on hmep060 (and Fuxi project establishment demonstration)
2.4G频段的无线收发芯片 SI24R1 问题汇总解答
【软件工程之美 - 专栏笔记】16 | 怎样才能写好项目文档?
【软件工程之美 - 专栏笔记】27 | 软件工程师的核心竞争力是什么?(上)
Reading papers on false news detection (I): fake news detection using semi supervised graph revolutionary network
ArduinoIDE + STM32Link烧录调试
STM32 串口乱码
利用云打码来破解登录遇到验证码的问题
Huawei cloud 14 days Hongmeng device development -day1 environment construction
防爆倾角传感器应用于LNG液化天然气安全作业
2022暑初二信息竞赛学习成果分享2
【软件工程之美 - 专栏笔记】29 | 自动化测试:如何把Bug杀死在摇篮里?
一些工具,插件,软件链接分享给大家~
基于stm32的四针OLED显示
2022 spring recruit - Shanghai an road FPGA post Manager (and Lexin SOC interview)
Fasttext learning - text classification