代码随想录学习Day 30

server/2024/9/23 7:22:16/

860.柠檬水找零

题目链接

讲解链接

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

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

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

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

python">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满足队列属性

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

python">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。

python">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://www.ppmy.cn/server/14090.html

相关文章

vue---自定义指令

一、定义语法: (1).局部指令: new Vue({directives:{指令名:配置对象}}) 或 new Vue({directives{指令名:回调函数}}) (2).全局指令: Vue.directive(指令名,配置对象) 或 Vue.directive(指令名,回调函数) 二、配置对…

OpenHarmony语言基础类库【@ohos.url (URL字符串解析)】

说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import Url from ohos.url URLParams9 URLParams接口定义了一些处理URL查询字符串的实用方法。 constructor9 constructor(init?…

Python 网络与并发编程(三)

文章目录 进程Process优势:劣势进程的创建方式(方法模式)进程的创建方式(继承Process类)Queue实现进程间通信Pipe实现进程间通信Manager管理器进程池(Pool) 进程Process 拥有自己独立的堆和栈,既不共享堆,也不共享栈&…

江开2024年春《大学英语(B)(2) 060052》过程性考核作业4参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 单选题 1阅读Passage One,回答C-1C-4个问题。请…

基于Python的图书借阅管理系统,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

【Docker】有关docker操作命令

最近在使用docker以及docker-compose等进行项目环境搭建,以及项目的部署,有些命令记录一下: 删除所有镜像 docker rmi $(docker images -q) -f停止所有容器 docker stop $(docker ps -aq)进入容器内部 docker exec -it CONTAINER_ID /bin/bas…

python机器学习库中Scikit-learn和TensorFlow如何选择?

在Python机器学习库中,Scikit-learn和TensorFlow是两个非常流行的选择,但它们各自有不同的特点和适用场景。以下是根据搜索结果的一些考虑因素,帮助你做出选择: 1. 项目需求: 如果你的项目主要涉及传统的机器学习算…

黄金行情下跌有投资机会吗?

尽管黄金价格的波动常常引起投资者的高度关注,但行情的下跌未必只是警讯,亦可能蕴藏着某些难得的投资机会。总之,答案是肯定的——在黄金行情下跌时,依旧有适宜的投资机会,只是这需要投资者具备相应的应对知识和策略。…