当前位置:网站首页>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的领先,希望看到这的朋友解答一下。
边栏推荐
- 【软件工程之美 - 专栏笔记】26 | 持续交付:如何做到随时发布新版本到生产环境?
- 基于msp430f2491的proteus仿真(实现流水灯)
- From entry to soul: how to use tb6600 single chip microcomputer to control stepping motor with high precision (42/57)
- Pit avoidance: about the interconnection of two hc-05 master-slave integrated Bluetooth modules, there is no connection problem
- 基于wifi的温度采集与控制系统
- Based on STM32: couple interactive doll (design scheme + source code +3d drawing +ad circuit)
- FPGA based: moving target detection (supplementary simulation results, available)
- 【软件工程之美 - 专栏笔记】16 | 怎样才能写好项目文档?
- Pytorch's data reading mechanism
- 【软件工程之美 - 专栏笔记】29 | 自动化测试:如何把Bug杀死在摇篮里?
猜你喜欢
随机推荐
HAL库学习笔记- 8 串口通信之概念
基于msp430f2491的proteus仿真(实现流水灯)
2022 spring move - core technology FPGA post technical aspects (one side experience)
HAL库学习笔记- 8 串口通信之使用
JUC并发知识点
低功耗蓝牙5.0芯片nrf52832-QFAA
HAL库学习笔记-10 HAL库外设驱动框架概述
SQLyog 安装和配置教程
【软件工程之美 - 专栏笔记】22 | 如何为项目做好技术选型?
基于51单片机ADC0808的proteus仿真
基于51单片机的直流电机调速系统(L298的使用)
给二维表添加时间序列索引
噪音监测传感系统
Hal library learning notes - 9 DMA
网络爬虫
顺序表和链表
crawl笔记
基于DAC0832的直流电机控制系统
Huawei cloud 14 day Hongmeng device development -day1 source code acquisition
PHY6252是一款超低功耗物联网蓝牙无线通信芯片









