代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
文章链接:柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球
视频链接:柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球
1. LeetCode 860. 柠檬水找零
1.1 思路
- 情况 1:如果客户支付 5 就直接收下即可;情况 2:如果客户支付 20 就需要 一张 10 和 一张 5 或者 三张 5 来找零;情况 3:如果客服支付 10 就需要 一张 5 来找零。场景就这三个
- 在情况 1、2 都是固定应对策略,而情况 3 是有两种应对方式,应该优先使用 一张 10 和 一张 5 来应对,因为 10 元只能用来找零这种情况,并且 5 更万能,如果没有再用 三张 5 来找零
- 局部最优:遇到 20 元的情况优先用 10+5 的方式应对
- 全局最优:完成整个账单的找零
- 定义三个变量 five=0,ten=0,twenty=0,twenty 不定义也行
- for(int bill : bills),遍历即可
1.2 代码
//
class Solution {public boolean lemonadeChange(int[] bills) {int five = 0;int ten = 0;for (int i = 0; i < bills.length; i++) {if (bills[i] == 5) {five++;} else if (bills[i] == 10) {five--;ten++;} else if (bills[i] == 20) {if (ten > 0) {ten--;five--;} else {five -= 3;}}if (five < 0 || ten < 0) return false;}return true;}
}
2. LeetCode 406. 根据身高重建队列
2.1 思路
- 这题思路和135. 分发糖果一样都有两个维度,本题是 h 和 k,因此像那题一样,不能同时考虑,不然那一定会顾此失彼,先确定一个维度再确定另一个维度。本题先确定哪个呢?
- 我们先按照 k 来排序,发现我们既没有把 k 确定下来也没有把 h 确定下来
- 因此我们再按 h 来从大到小排序,如果 h 相同 k 就从小到大排,这种方式起码 h 确定下来了,那我们遍历到每个人的时候前面的身高一定是>=他自己的,如果你想他前面有 k 个身高>=他的话,就把他插入到 k 下标的位置即可。由于我们身高是从大到小排序的,我们插入的时候是从大到小遍历去找 k 位置插入的,后面的一定没有前面高,因此插入后并不影响排序
- 最开始先给数组排序,按 h 从大到小排序,如果 h 相同,k 就从小到大排序(Java 这里要自己实现)
- 定义个二维集合 queue,然后将排完序的数组从头开始遍历,获得 people[i][1] 的插入位置,直接插入到 queue 中即可
- return queue 即可( Java 里需要转换一下)
- 这里不可以做 people 数组上操作,因为可能会操作同一个元素,因为有可能后面的元素已经插入到前面了,原位置还保留着,就可能重复操作
2.2 代码
//
class Solution {public int[][] reconstructQueue(int[][] people) {// 身高从大到小排(身高相同k小的站前面)Arrays.sort(people, (a, b) -> {if (a[0] == b[0]) return a[1] - b[1]; // a - b 是升序排列,故在a[0] == b[0]的狀況下,會根據k值升序排列return b[0] - a[0]; //b - a 是降序排列,在a[0] != b[0],的狀況會根據h值降序排列});LinkedList<int[]> que = new LinkedList<>();for (int[] p : people) {que.add(p[1],p); //Linkedlist.add(index, value),會將value插入到指定index裡。}return que.toArray(new int[people.length][]);}
}
3. LeetCode 452. 用最少数量的箭引爆气球
3.1 思路
- 本题给的二维数组表示的就是气球的左边界和右边界,弓箭是垂直 x 轴往上射的,重叠的气球是可以一起射爆的。
- 局部最优:重叠的气球尽量在一起,用一支弓箭去射
- 全局最优:用了最少的弓箭数
- 本题中没有必要把射爆的气球从数组中移除,只需要记录弓箭数,还有就是如何记录重叠的气球。
- 开始先判断数组的长度如果等于 0 就直接 return 0 即可。然后首先我们要进行排序,可以统一按照左边界排序也可以统一按照右边界排序,都可以。这里统一按照左边界排序,让重叠的气球尽量相邻。定义个 result 记录弓箭数,初始化为 1,因为上面已经判断 0 气球的情况了,起始至少都是有一个气球的,后面有需要再额外++
- 然后是 for 循环遍历,for(int i=1; i<point.length; i++)从 1 开始是因为后面比较是第 i 个和 第 i-1 个比较
- 不重叠的情况:排序后,如果第 i 个气球的左边界大于第 i-1 个气球的右边界 if(point[i][0]>point[i-1][1]),证明一定是不重叠的,就一定需要 result++了。
- 重叠的情况:因为我们已经是针对左边界进行排序了,因此只需要判断右边界即可判断相邻的气球是否重叠了,不重叠就是 if(point[i][0]>point[i-1][1]),else 就是重叠了即相当于如果第 i 个气球的左边界小于等于第 i-1 个气球的右边界(point[i][0]<=point[i-1][1])的情况了,为什么有“等于号”,因为题目描述两个气球如果是相邻的话也是可以一个弓箭射的。
- 现在问题是知道了相邻两个重叠的情况了,那和下一个重不重叠呢?此时就需要更新我们的右边界,两个气球重叠之后,它们整体的右边界应该是取两个气球的右边界的最小值,为什么是最小值?因为如果取最大值,用一个弓箭只能射爆右边那个气球了,只有取右边界的最小值才能射爆两个气球。point[i][1]=Math.min(point[i-1][1],point[i][1])。
- 如果下一个气球的左边界没有大于上面两个气球更新后的右边界,说明和上面两个气球不重合,则上面两个气球就用一支弓箭,这个新的气球就需要另一支弓箭了
3.2 代码
//
/*** 时间复杂度 : O(NlogN) 排序需要 O(NlogN) 的复杂度* 空间复杂度 : O(logN) java所使用的内置函数用的是快速排序需要 logN 的空间*/
class Solution {public int findMinArrowShots(int[][] points) {// 根据气球直径的开始坐标从小到大排序// 使用Integer内置比较方法,不会溢出Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));int count = 1; // points 不为空至少需要一支箭for (int i = 1; i < points.length; i++) {if (points[i][0] > points[i - 1][1]) { // 气球i和气球i-1不挨着,注意这里不是>=count++; // 需要一支箭} else { // 气球i和气球i-1挨着points[i][1] = Math.min(points[i][1], points[i - 1][1]); // 更新重叠气球最小右边界}}return count;}
}
相关文章:

代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球 文章链接:柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球 视频链接:柠檬水找零 根据身高重建队列 …...

完美解决configure: error: APR not found. Please read the documentation.
目录 一、问题: 二、原因: 三、解决方法: 一、问题: ./configure 出现如下问题: configure: error: APR not found. Please read the documentation. 二、原因: 配置:错误:找不…...

Jenkins部署失败:JDK ‘jdk1.8.0_381‘ not supported to run Maven projects
Jenkins部署报错:JDK ‘jdk1.8.0_381’ not supported to run Maven projects提示使用的jdk有问题,启动的jdk版本不能满足项目启动。 登录Jenkins管理页面,系统管理——全局工具配置——JDK安装配置满足条件的JDK版本,保存配置&…...

xml导出pdf简单实现
1. 引入依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>8.0.1</version> </dependency>2. 代码实现 import com.itextpdf.kernel.geom.PageSize; import com.itextpdf.ker…...

JAVAEE初阶相关内容第十六弹--网络编程
写在前 这一节的内容首先是对十五弹(UDP回显服务器)进行简单的改进,在这基础上开始介绍TCP流套接字编程。 目录 写在前 1.改进回显服务器 1.1完整代码实现 1.2运行输出结果 2.TCP流套接字编程 2.1ServerSocketAPI 2.2SocketAPI 3.TC…...

Python---练习:使用for循环嵌套实现打印九九乘法表
思考: 外层循环主要用于控制循环的行数,内层循环用于控制列数。 基本语法: # 外层循环 for i in 序列1:# 内层循环for j in 序列2:循环体 序列1 序列2 ,就可以是range(1, 10) -----也就是从1,到9。 参考while循环…...

mac安装并使用wireshark
mac安装并使用wireshark 1 介绍 我们在日常开发过程中,遇到了棘手的问题时,免不了查看具体网络请求情况,这个时候就需要用到抓包工具。比较著名的抓包工具就属:wireshark、fildder。我这里主要介绍wireshark。 2 安装 以mac安装为…...

torch张量的降维与升维
文章目录 一、降维和升维未完待续.... 一、降维和升维 squeeze和unsqueeze是torch张量常用的降维与升维的一种方式,但这种方式只能增添或减少大小为1的维度,如下: x1 torch.randn(1, 8, 256, 256) x1 torch.squeeze(x1,dim0) print(x1.sh…...

八大排序算法(C语言版)之插入排序
八大排序详解 目录:一、排序的概念1.1 排序的概念1.2 排序的应用 二、直接插入排序三、希尔排序四、排序算法复杂度及稳定性分析 目录: 八大排序算法: #mermaid-svg-7qCaGEYz0Jyj9dYw {font-family:"trebuchet ms",verdana,arial,…...

Linux系统安装redis并配置为服务
一、Linux环境 1、下载 官网提供的源码下载地址: https://github.com/redis/redis/archive/7.0.5.tar.gz 2、将源码上传至服务器 3、解压缩 # 将解压缩后的文件放置在同目录的source文件夹下 tar -zxvf redis-7.0.5.tar.gz -C ./source4、编译安装 对源码进行编…...

DDIO和DMA有什么区别
DDIO 和 DMA 的区别 DDIO (Data Direct I/O Technology) 主要应用: 主要用于网卡和CPU之间的数据传输。工作原理: 通过CPU的Last Level Cache (LLC) 直接与外部网卡交换数据,绕过了主存储器。优点: 减少了CPU和网卡等待内存的时间。提高了数据包的处理速度。减少了…...

【MATLAB源码-第58期】基于蛇优化算法(SO)和粒子群优化算法(PSO)的栅格地图路径规划最短路径和适应度曲线对比。
操作环境: MATLAB 2022a 1、算法描述 粒子群算法 (Particle Swarm Optimization, PSO) 1. 算法概述 粒子群算法是一种基于群体智能的优化算法,模拟鸟群觅食的行为。算法中的每个粒子代表问题的一个可能解,并且具有位置和速度两个属性。粒…...

nlp与知识图谱代码解读
词嵌入 简单原理 我们要给一群14岁的孩子讲解词嵌入。可以使用一些比喻和生活中的例子: 老师: 你们还记得玩乐高积木的时候,每个积木块代表了一个特定的事物或形状吗?现在,想象一下,每个词都像是一个乐高…...

Redis设计与实现(3)字典
Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每一个哈希表节点就保存了字典中的一个键值对 redis字典所使用的哈希表由dict.h/dictht typedef struct dictht{//哈希表数组dictEntry **table;//哈希表大小unsigned long si…...

STM32MP157D BSP
一,全志R16、IMX6ULL和STM32MP157D启动相关 1,IMX6ULL是EMMC启动后,通过uboot fat命令的load进内存进行启动测试 2,openedv应该也是参考的官方的板子,类似调试口等均应该是一致的,所以目前就是用正点原子…...

最新SQL注入漏洞修复建议
点击星标,即时接收最新推文 本文选自《web安全攻防渗透测试实战指南(第2版)》 点击图片五折购书 SQL注入漏洞修复建议 常用的SQL注入漏洞的修复方法有两种。 1.过滤危险字符 多数CMS都采用过滤危险字符的方式,例如&…...

新人FPGA验证书籍推荐
1、FPGA之道 推荐理由:FPGA基础知识讲解全面,可以作为参考书时常翻阅; 2、Verilog数字系统设计教程 推荐理由:FPGA语法详细的介绍,案例比较有代表性; 工具类书籍推荐: 3、ModelSim电子系统…...

TypeError: data.reduce is not a function:数据类型不匹配
错误展示: 错误分析: 首先来看看前端代码:我表格绑定的数据模型是tableData,而我tableData定义的是一个数组 其次看看后端给的数据: 传递的是一个对象,而不是一个数组! 这样原因就找出了&…...

出租屋智能视频监控系统方案:全面保卫租客安全
除了我们常见的家庭、社区、园区等智能监控,出租房作为很多人的暂住所也极易发生盗窃等事件,为保障大众租户的财产安全,旭帆科技特地针对出租屋制定了智能监控系统方案。 1、安装智能安防摄像头 高清晰度、夜视功能良好的智能摄像头…...

代码解读-自然语言处理
目录 demo3文本转为向量代码解读给出每一步的输出 demo3文本转为向量 代码 from tensorflow.keras.preprocessing.text import Tokenizer # 标记器(每一个词,以我们的数值做映射,)words [LaoWang has a Wechat account., He is not a nice person., …...

docker指令
镜像操作: # 搜索镜像 docker search image_name # 搜索结果过滤:是否是官方 docker search --filter --filter is-official image_name # 搜索结果过滤:是否是自动化构建 docker search --filter --filter is-automated image_name # 搜索结…...

【MySql】9- 实践篇(七)
文章目录 1. 一主多从的主备切换1.1 基于位点的主备切换1.2 GTID1.3 基于 GTID 的主备切换1.4 GTID 和在线 DDL 2. 读写分离问题2.1 强制走主库方案2.2 Sleep 方案2.3 判断主备无延迟方案2.4 配合 semi-sync方案2.5 等主库位点方案2.6 GTID 方案 3. 如何判断数据库是否出问题了…...

Maven compile时报错 系统资源不足,出现OOM:GC overhead limit exceeded
今天在对项目进行Maven clean compile的时候,报出了如下的错误, 系统资源不足。 有关详细信息,请参阅一下堆栈跟踪。 java.lang.OutOfMemoryError: GC overhead limit exceededat java.util.EnumSet.noneOf(EnumSet.java:115)at com.sun.too…...

启动内核ip转发和其他优化
1.临时修改 echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse 2.配置文件修改 vim /etc/sysctl.conf net.ipv4.ip_forward 1 net.ipv4.tcp_tw_reuse 1 vm.swappiness 0 kernel.sysrq 1 net.ipv4.neigh.default.gc_stale_t…...

信息安全技术
1.与区块链相关的技术 区块链技术的核心是一系列的信息安全技术,其体系结构为: 区块链技术核心相关技术:A..非对称加密 B.时间戳 C.哈希函数 D.智能合约 E.POS 2.哈希函数 哈希算法 MD5SHA 哈希算法作用 用于保障信息完…...

SQL 选择数据库 USE语句
SQL 选择数据库 USE语句 当SQL Schema中有多个数据库时,在开始操作之前,需要选择一个执行所有操作的数据库。 SQL USE语句用于选择SQL架构中的任何现有数据库。 句法 USE语句的基本语法如下所示 : USE DatabaseName;数据库名称在RDBMS中必须是唯一的。…...

FL Studio21版无限破解版下载 软件内置破解补丁
FL Studio是一款非常好用方便的音频媒体制作工具,它的功能是非常的强大全面的,想必那些喜欢音乐创作的朋友们应该都知道这款软件是多么的好用吧,它还能够给用户们带来更多的创作灵感,进一步加强提升我们的音乐制作能力。该软件还有…...

【代码随想录】算法训练计划02
1、977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 思路: 这题思路在于——双指针…...

hive针对带有特殊字符非法json数据解析
一、背景 有的时候前端或者后端进行埋点日志,会把json里面的数据再加上双引号,或者特殊字符,在落日志的时候,组装的格式就不是正常的json数据了,我们就需要将带有特殊字符的json数据解析成正常的json数据。 二、正则…...

【C++进阶之路】第三篇:二叉搜索树 kv模型
文章目录 一、二叉搜索树1.二叉搜索树概念2.二叉搜索树操作3.二叉搜索树的实现 二、二叉搜索树的应用1.kv模型2.kv模型的实现 三、 二叉搜索树的性能分析 一、二叉搜索树 1.二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性…...