Day35代码随想录贪心part04:860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

Day35 贪心part04

860.柠檬水找零

leetcode题目链接:860. 柠檬水找零 - 力扣(LeetCode)

**复习一下dict的语法:**wallet[i] = wallet.get(i, 0)+1

本题一开始尝试用逐层判断去做,但这样好像并不合理

思路:只需要维护三种金额的数量,5,10和20。有如下三种情况:

  • 情况一:账单是5,直接收下。
  • 情况二:账单是10,消耗一个5,增加一个10
  • 情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5

因为美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!

如果一开始定义比如five = 0, ten = 0, twenty = 0后序就比较好判断,如果像我一开始初始化wallet = {}的问题就是可能出现空判断的情况!下次可以注意这一点

class Solution:def lemonadeChange(self, bills: List[int]) -> bool:wallet = {}wallet[5], wallet[10], wallet[20] = 0,0,0for i in range(len(bills)):if bills[i] == 5:wallet[5] = wallet.get(5, 0)+1if bills[i] == 10:if len(wallet)!=0 and wallet[5] >=1:wallet[5] -=1wallet[10] = wallet.get(10, 0)+1else:return Falseif bills[i] == 20:if len(wallet)==0:return False # 优先用5+10这个组合elif wallet[5]>=1 and wallet[10]>=1:wallet[5] -=1wallet[10] -= 1wallet[20] = wallet.get(20, 0)+1elif wallet[5]>=3:wallet[5] -=3wallet[20] = wallet.get(20, 0)+1else:return Falsereturn True

406.根据身高重建队列

leetcode题目:406. 根据身高重建队列 - 力扣(LeetCode)

**题意:**假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

思路:遇到两个维度都需要考虑的问题一定不要两个同时考虑,要先确定一个维度之后再确定另外一个维度

举例模拟:

  • 输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
  • 输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]

首先如果根据前面有几个人这个维度ki从小到大排序,会变为[5,0],[7,0],[6,1],[7,1],[5,2],[4,4]这样会发现[5,2]和[4,4]调整的时候,身高也是不能确定下来的,然后ki前面有几个人这个维度也比较难确定。

于是考虑从身高这个维度hi开始排序,从大到小排序:此时我们可以确定一个维度了,就是身高,前面的节点一定都比本节点高!

[[7,0],[7,1],[6,1],[5,0],[5,2], [4,4]]这样可以发现,后面的元素即使因为ki维度大需要往前调整,前面也都是比他大的元素,需要插入的位置就是ki维度的大小

插入的过程:

  • 插入[7,0]:[[7,0]]
  • 插入[7,1]:[[7,0],[7,1]]
  • 插入[6,1]:[[7,0],[6,1],[7,1]]
  • 插入[5,0]:[[5,0],[7,0],[6,1],[7,1]]
  • 插入[5,2]:[[5,0],[7,0],[5,2],[6,1],[7,1]]
  • 插入[4,4]:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:people.sort(key = lambda x: (-x[0], x[1]))# 先按照h维度的身高顺序从高到低排序。确定第一个维度# lambda返回的是一个元组:当-x[0](维度h)相同时,再根据x[1](维度k)从小到大排序que = []for p in people:que.insert(p[1], p)return que

这段代码主要要熟悉sort中的lambda和列表的insert操作

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

leetcode题目链接:452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

贪心算法:判断重叠区间问题

思路:

  • 首先对气球进行排序,比如按照左边界排序;

  • 判断气球重叠:

    (1)如果第i个气球的左边界大于第i+1个气球的右边界,则一定不重合;

    (2)如果第i个气球的左边界小于第i+1个气球的右边界,则一定重合;这时的重点是如何判断第i+2个气球:这时更新最小右边界是i和i+1的最小值,才能和下一个气球比较

class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:if len(points) == 0: return 0points.sort(key = lambda x: x[0])res = 1for i in range(1, len(points)):if points[i-1][1] < points[i][0]: #不挨着的情况res +=1else:points[i][1] = min(points[i-1][1], points[i][1])return res

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习网络训练,Loss出现Nan的解决办法

文章目录 前言 一、原因 二、典型实例 1. 梯度爆炸 2. 不当的损失函数 3. 不当的输入 前言 模型的训练不是单纯的调参&#xff0c;重要的是能针对出现的各种问题提出正确的解决方案。本文就训练网络loss出现Nan的原因做了具体分析&#xff0c;并给出了详细的解决方案&#xff…

LT8711UXD助力新款Swtich游戏机底座《4K/60HZ投屏方案》

Nintendo Switch&#xff08;OLED版&#xff09;正面搭载了一块分辨率为720P的7.0英寸OLED屏幕&#xff1b;具有白色和电光蓝电光红2种颜色&#xff1b;机身长度102毫米&#xff0c;宽度242毫米&#xff0c;厚度13.9毫米&#xff0c;重量约420克。 [2]Nintendo Switch&#xff…

举个栗子!Tableau 技巧(271):同时筛选不同年份的 TopN 数据

零售企业的销售数据分析中&#xff0c;经常用排序来查看过去一年或者几年的数据 TopN 情况。如果可以在同一视图中&#xff0c;呈现很多年的数据排名&#xff0c;且通过筛选能灵活调整 TopN 的 N 值&#xff0c;岂不是更方便&#xff1f; 如下示例&#xff1a;图表呈现了各品牌…

centos7上搭建mongodb数据库

1.添加MongoDB的YUM仓库&#xff1a; 打开终端&#xff0c;执行以下命令来添加MongoDB的YUM仓库&#xff1a; sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo 在打开的文件中&#xff0c;输入以下内容&#xff1a; [mongodb-org-4.4] nameMongoDB Repository baseurlh…

【sping】在logback-spring.xml 获取项目名称

在日志文件中我们想根据spring.application.name 创建出的文件夹。 也不想死在XML文件中。 application.yml spring:application:name: my-demo logback-spring.xml <springProperty name"application_name" scope"context" source"spring.app…

如何用微信小程序实现远程控制无人售货柜

如何用微信小程序实现远程控制无人售货柜呢&#xff1f; 本文描述了使用微信小程序调用HTTP接口&#xff0c;实现控制无人售货柜&#xff0c;独立控制售货柜、格子柜的柜门。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi…

Java基础:设计模式之简单工厂模式

简单工厂模式是一种创建型设计模式&#xff0c;它通过一个专门的类&#xff08;即工厂类&#xff09;负责创建对象&#xff0c;从而将对象的创建过程与客户端代码解耦。简单工厂模式的核心在于提供一个统一的入口&#xff0c;接收外界请求并根据请求参数返回相应的对象实例&…

Linux系统上C++使用alsa库播放声音文件

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、命令行1.ffmpeg2.aplay 二、代码实现总结 前言 平常读麦克风的场景居多&#xff0c;有时候也需要播放一个声音文件&#xff0c;这里就介绍怎么处理。 一、…

自动驾驶光学校准反射板

光学校准反射板是一种用于光学系统校准的重要工具。它以其高反射率和精确的几何特性&#xff0c;为光学仪器、光学系统和光学元件的校准提供了可靠的参考。在现代光学领域&#xff0c;光学校准反射板的应用已经深入到各个领域&#xff0c;从科学研究到工业生产&#xff0c;都离…

# IDEA2019 如何打开 Run Dashboard 运行仪表面板

IDEA2019 如何打开 Run Dashboard 运行仪表面板 段子手168 1、依次点击 IDEA 上面工具栏 —> 【View】 视图。 —> 【Tool Windows】 工具。 —> 【Run Dashboard】 运行仪表面板。 2、如果 【Tool Windows 】工具包 没有 【Run Dashboard】 运行仪表面板 项 依次…

慈航医疗“五进”实践活动第九场:范庄村爱心义诊,村民健康有“医”靠

为落实推进“健康中国”战略&#xff0c;提升居民健康意识和预防疾病能力&#xff0c;4月18日&#xff0c;慈航医疗健康前往范庄村开展健康义诊活动&#xff0c;为100余位村民送上了一份暖心的公益关爱。 义诊当天&#xff0c;在志愿服务队队员的引领下&#xff0c;慈航医疗健康…

数据结构|树形结构|并查集

数据结构|并查集 并查集 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c;常言道&#xff0c;不积跬步无以至千里&#xff0c;希望有朝一日我们积累的滴水可以击穿顽石。 有趣的并查集剧情演绎&#xff1a;【算法与数据结构】—— 并…

JavaScript —— APIs(三)

一、事件流 &#xff08;一&#xff09;定义 &#xff08;二&#xff09;事件捕获 事件捕获&#xff0c;对话框从大到小弹出&#xff0c;先弹出爷爷&#xff0c;最后弹出儿子 &#xff08;三&#xff09;事件冒泡 冒泡事件&#xff0c;对话框从小到大弹出&#xff0c;先弹出…

详解QString与QByteArray使用对比

QString与QByteArray是Qt库中两种不同的字符串/字节序列容器&#xff0c;各自服务于特定的应用场景。本篇文章将详细解析它们的异同&#xff0c;帮助您在实际编程中准确选择和有效地使用这两种类型。 参考 QString类的使用 相同之处 构造与初始化&#xff1a; 两者都支持直接使…

Apache Answer 开源问答社区安装体验

Answer 是由 SegmentFault 思否团队打造的一款问答平台软件,后端使用 Go 语言编写,于2022年10月24日(程序员节)正式开源。你可以免费使用 Answer 高效地搭建一个问答社区,并用于产品技术问答、客户支持、用户交流等场景。 2023年10月9日,Answer 顺利通过投票,以全票通过…

Binlog、Redo 和 Undo 的概念与区别

目录 Binlog&#xff08;Binary Log&#xff09; Redo Log&#xff08;重做日志&#xff09; Undo Log&#xff08;回滚日志&#xff09; Binlog 与 Redo Log 和 Undo Log 的区别 Binlog&#xff08;Binary Log&#xff09; Binlog&#xff0c;即二进制日志&#xff0c;是M…

华为sr-mpls policy配置案例

SR&#xff0d;MPLS POLICY在ensp上面做不了&#xff0c;这是官方上的配置

编译Milkv-duo固件

Milk-V Duo 是一款基于 CV1800B 芯片的超紧凑型嵌入式开发平台。它可以运行Linux和RTOS&#xff0c;为专业人士、工业ODM、AIoT爱好者、DIY爱好者和创作者提供可靠、低成本、高性能的平台。 硬件 CPU&#xff1a;CVITEK CV1800B (C9061Ghz C906700MHz)双 RV64 内核&#xff…

node+vue3的websocket前后端消息推送

nodevue3的websocket前后端消息推送 前期写web项目时&#xff0c;前端获取数据的方式一般是向后端发起数据请求&#xff0c;然后后端向前端发送数据&#xff0c;然后对数据进行渲染&#xff0c;这是最常规的一种数据通讯方式&#xff0c;适用于绝大部分前后端分离的项目 实际…

多项式和Bezier曲线拟合

目录 1. 多项式拟合2. Bezier曲线拟合3. 源码地址 1. 多项式拟合 在曲线拟合中&#xff0c;多项式拟合方法的性能受到三个主要因素的影响&#xff1a;采样点个数、多项式阶数和正则项。 采样点个数 N N N&#xff1a;从Figure 1中可以看出较少的采样点个数可能导致过拟合&…