代码随想录学习Day 30

860.柠檬水找零

题目链接

讲解链接

思路:需要找零的情况是顾客支付10元或20元,尤其是支付20元时需要考虑找零的方式,此时可以选择找零3张5元或者一张10元+一张5元,按照贪心算法的思路来看:

局部最优:在找零20元时尽量采用10+5的方式,多保留5元,因为5元能够找零的情况更多;

全局最优:每次找零尽可能多的保留5元从而为更多的顾客找零。

找到贪心的思路后其余部分实现就比较简单了。用一个字典来统计当前手中的钞票,每次找零时将消耗的钞票-1,如果当前钞票不满足找零条件则返回False,循环结束返回True。

class Solution:def lemonadeChange(self, bills: List[int]) -> bool:if bills[0] > 5:  # 第一个就大于5无法找零,直接返回return Falsemoney = {5:0, 10:0, 20:0}  # 初始手中没钱for i in range(len(bills)):  # 遍历账单数组money[bills[i]] = money.get(bills[i], 0) + 1  # 每次将收到的钱在字典中对应位置+1if bills[i] == 5:  # 等于5则不需要找零continueelif bills[i] == 10:  # 等于10需要用一张5元来找零if money[5] > 0:  # 当前手中有5元money[5] -= 1  # 5元钞票的数量-1continueelse:return Falseelif bills[i] == 20:  # 需要用3张5元或者1张10元和一张5元来找零if money[5] >= 1 and money[10] >= 1:  # 优先考虑后者,因为要尽量多保留5元money[5] -= 1money[10] -= 1elif money[5] >= 3:  # 在没有10+5的情况下才考虑3*5money[5] -= 3continueelse:return Falsereturn True  # 循环结束则返回True

406.根据身高重建队列

题目链接

讲解链接

思路:先对所有人按照身高从大到小进行排序,身高相同的话则k小的站前面,接下来以k为下标插入队列即可。因为按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。

局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性

全局最优:最后都做完插入操作,整个队列满足题目队列属性

class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:people.sort(key=lambda x: (-x[0], x[1]))  # 先按照身高降序排序,在按照k值从小到大排序queue = []for p in people:  # 按照k值进行插入queue.insert(p[1], p)  # people已经排序过了,同一高度时k值小的排前面return queue

452.用最少数量的箭引爆气球

题目链接

讲解链接

局部最优:当气球出现重叠,一起射,所用弓箭最少。

全局最优:把所有气球射爆所用弓箭最少。

为了让气球尽可能的重叠,需要对数组进行排序。按照起始位置排序,那么就从前向后遍历气球数组,靠左尽可能让气球重复。从前向后遍历遇到重叠的气球,重叠气球中右边边界的最小值之前的区间一定需要一支箭。可以看出首先第一组重叠气球,一定需要一支箭。而气球3的左边界大于第一组重叠气球的最小右边界,所以再需要一支箭来射气球3。

class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:points.sort(key=lambda x: x[0])  # 将所有气球按照左端点排序left, right = points[0][0],points[0][1]  # 初始化左右边界值为第一个气球的左右端点count = 1  # 统计需要箭的数量,初始为1for i in points:  # 遍历气球数组if i[0] > right:  # 如果当前气球的左端点大于右边界值,说明不能只用一支箭将其与前面的气球引爆,消耗箭矢的数量+1count += 1left, right = i[0], i[1]  # 更新当前的左右边界,为该气球的左右端点else:  # 如果不符合上面的条件,则说明可以用一支箭将该气球与之前的气球引爆left = max(left, i[0])  # 更新左边界,取区间的交集right = min(right, i[1])  # 同上取交集更新右边界return count

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2978916.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

javaWeb项目-财务管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、Springboot框架 …

在Qt助手(Assistant)中查看Qt5的所有模块

2024年4月23日,周二上午 选择“内容”选项卡,列表里面的内容就是Qt5的所有模块

50W 1.5KVDC 隔离 宽电压输入 DC/DC 电源模块 ——TP50DG 系列

TP50DG系列电源模块额定输出功率为50W,应用于2:1、4:1电压输入范围9V-18V、18V-36V、36V-75VDC,9-36V,18-75V的输入电压环境,输出电压精度可达1%,具有输入欠压保护、输 出过流保护、输出短路保护、输出过压…

Java基础之JVM基础调优与常见问题

常见命令 以下命令的介绍,全部在jdk8环境下运行的; jps ☆☆☆☆☆ 查看当前运行的进程号; jmap ☆☆☆ jmap命令可以查看jvm的内存信息,class对应的实例个数以及占用的内存大小 jmap -histo 查看当前java进程 [rdVM-8-12-c…

PDF文件去除文字水印

文章目录 0、背景1、准备工作2、查看是否是文字水印3、批量去除水印 0、背景 本文主题为去除PDF文件中的水印。源文件来自这里。防止丢失,我在这里做个记录,感谢原作者的付出,也欢迎大家关注原作者。 1、准备工作 下载Adobe Acrobat DC软件…

Spark Standalone模式部署

准备至少2台虚拟机,装好linux系统,我装的是Ubuntu20.04。 1.修改主机名(每台) 1)修改/etc/hostsname内容,主节点改为master,子节点改为slaver1 sudo vim /etc/hostname 2)在/etc/…

【Netty】使用Netty实现自己的通信协议

前言 基于Netty开发的网关 为什么需要自定义协议这一点的理由其实很容易想到。 比如对于我们比较熟知的Dubbo,其内部的协议就是自定义的。 之所以需要自定义协议,无非是因为:没有一种标准化协议来满足不同差异化需 求。 因此很多的中间件都会…

揭秘“磁盘管理未知没有初始化”背后的秘密与应对策略

在日常使用电脑的过程中,我们有时会遇到一个令人头疼的问题——磁盘管理显示“未知没有初始化”。这种情况意味着系统无法正确识别和管理该磁盘,导致我们无法访问其中的数据。那么,究竟什么是“磁盘管理未知没有初始化”?又该如何…

等保测评之主机测评详解(二级)

等保测评之主机测评详解(二级)服务器——Windows 身份鉴别: 测评项a): a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; 整改方…

java实现解析html获取图片或视频url

一、前言 有时在实际项目中,比如发布某篇文章,需要取文章中的某张图片作为封面,那么此时需要文章内容,获取html内容中的图片地址作为封面,下面讲下如何获取html中的图片或视频地址。 二、实现 1.先定义一个工具类&…

公司文件如何加密?

在数字化办公的今天,公司文件的加密不仅是保护企业机密的重要措施,也是维护企业竞争力的必要手段。通过使用专业的数据安全解决方案,比如华企盾DSC数据防泄密系统,企业可以有效地对文件进行加密,确保数据安全。 加密方…

Ventus(承影):基于RISC V的开源GPGPU

Ventus(承影):基于RVV的开源GPGPU 清华大学集成电路学院dsp-lab的承影RVV GPGPU设计文档。 整体目标 提供一个开源的基于RVV的GPGPU实现方案,并给出软件映射方案、指令集(支持的指令及特性、添加的自定义指令&#xf…

WPS Office 2019 专业增强版,高效办公新体验 (WPS2019企业版 v11.8.2.12188)

WPS Office 2019 专业增强版,高效办公新体验 本站所有素材均来自于互联网,版权属原著所有,如有需要请购买正版。如有侵权,请联系我们立即删除。引用

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明 文章编号&am…

Php-WebView 现代跨平台 GUI分享

GitHub :php-webview 一个用于 C/C 的小型跨平台 Web 视图库,用于构建现代跨平台 GUI。 该项目的目标是为最广泛使用的平台创建一个通用的 HTML5 UI 抽象层。 它支持双向 JavaScript 绑定(从 C/C 调用 JavaScript 和从 JavaScript 调用 C/C)。…

【智能算法】蜉蝣算法(MA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年,K Zervoudakis等人受到自然界蜉蝣交配繁殖行为启发,提出了蜉蝣算法(Mayfly Algorithm, MA)。 2.算法原理 2.1算法思想 MA灵感来自蜉蝣交配…

CST电磁仿真软件的激励设置和使用场导入【基础教程】

设置平面波激励 确认平面波的特性! Simulation > Sources and Loads > Plane Wave 通过Plane Wave在远离观测对象的位置接通场源(Field Source),进行入射波的仿真分析该功能主要在RCS(Radar Cross Section)和EMS(Electromagnetic Susceptibilit…

基于TSM模块的打架斗殴识别技术

目 录 1 引言.... 4 1.1 研究背景与意义.... 4 1.2 研究现状综述.... 5 1.3 研究内容.... 6 1.3.1 图像预处理的优化.... 6 1.3.2 TSM模块的应用.... 6 1.3.3 视频分类的设计与实现.... 6 2 关键技术与方法.... 8 2.1 TSM算法与模型选择.... 8 2.1.1 TSM算法原理.... 8 2.1.2 …

Github首页美化(updating)

Github首页美化 https://github.com/QInzhengk一、新建仓库二、美化Github首页主页访问量统计仓库状态统计常用语言占比统计社交链接 界面展示 https://github.com/QInzhengk 一、新建仓库 对Github首页进行美化,需要新建一个仓库名和自己 Github 用户名相同的仓库…

Java进阶-Stream流

概述 在Java8中,得益于lambda所带来的函数式编程,引入了一个全新的Stream流的概念目的:用于简化集合和数组操作的api 案例 需求:创建一个集合存储多个字符串元素,将集合中所有以“z”开头的元素存储到新的集合中&am…