代码随想录算法训练营第三十四天丨860.柠檬水找零、406. 根据身高重建队列、860. 柠檬水找零


860. 柠檬水找零

遇到顾客给20块的,优先拿10块的找给他。

class Solution:def lemonadeChange(self, bills: List[int]) -> bool:change = {5: 0, 10: 0}for bill in bills:if bill == 5:change[5] += 1elif bill == 10:if change[5] < 1:return Falsechange[5] -= 1change[10] += 1else:if change[10] >= 1 and change[5] >= 1:change[10] -= 1change[5] -= 1elif change[5] >= 3:change[5] -= 3else:return Falsereturn True


406. 根据身高重建队列

我的思路:

AC了一个On^2的写法,

建一个哈希表,键为所有的身高,值为一个有序列表,以ki从小到大排序。对键值从小到大遍历,每次弹出列表尾元素,ki是多少,前面就留几个空,直到遍历完所有的元素。

class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:n = len(people)ht = collections.defaultdict(list)pos = [x for x in range(n)]res = [None] * npeople.sort()for person in people:ht[person[0]].append(person)for i in range(n):count = 0height = people[i][0]rank = ht[height].pop()[1]res[pos[rank]] = [height, rank]del pos[rank]return res

优化:

啊其实思路大概是对的了,哈希表套栈不是必要的,因为可以通过匿名函数实现身高升序、ki降序排序:

people.sort(key=lambda x:(x[0],-x[1]))

然后后续留空其实也是不必要的,可以用insert方法插值;我的方法是从低到高,把矮的按照前面有几个比他高的放到对应的位置。如果从高到低排序,先把高放下来,后面放矮的就是按照他的k值来放,矮的k只相对于前面已经放下的高的,所以从高到低放;相同高度就看k值,先放k小的,再放k大的,可以保证前面的是大于等于自己高度的。

代码:

class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:people.sort(key=lambda x:(-x[0], x[1]))res = []for person in people:res.insert(person[1], person)return res

就换了个排序顺序就差了这么多代码量,真的好壮观!!

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

我的方法:

先排序,起始点和终点都是升序,然后对每一个point,计算他和之前所有的交集,如果某处没有交集了,就要多打一支箭,把交集置为新的point。

class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:arrows = 1points.sort()inter = points[0]print(points)for point in points:if point[0] > inter[1]:inter = pointarrows += 1else:inter[0] = max(inter[0], point[0])inter[1] = min(inter[1], point[1])return arrows

优化:

思路大概是一样的,其实用不着每次记录一个交集,只要记录边界即可。按照end升序排序,记录end,从第一个point开始,point的start如果小于等于记录的end,那么从start射一箭必可以引爆前面所有的气球;如果start大于end了,把end置为新的point的end,多加一枝箭。

class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:arrows = 1points.sort(key=lambda x: x[1])end = points[0][1]for i_start, i_end in points:if i_start > end:end = i_endarrows += 1return arrows

我的原始方法虽然逻辑上正确,但在处理每个气球时,尝试通过更新交集区间来最大程度地减少所需的箭数。这一步虽然在理论上能够为每次射箭找到一个最优的射击点,但实际上却增加了计算复杂度。题解方法提供了一个更为高效的视角,它通过将气球按照结束坐标进行排序,确保了我们总是在可能的最早点射出箭来引爆气球。在这个方法中,只有当遇到一个新的气球,且这个气球的起始坐标超过了当前箭能覆盖的最远距离时,才会增加箭的数量。这样的处理不仅简化了逻辑,还显著减少了计算量,因为它避免了不必要的每次交集更新,而仅在必要时更新箭的射击范围。

今日总结:

全AC了,但第二三题跟题解比起来都在运行速度上有所欠缺,思路仍然不是十分清晰,看到题解会有豁然开朗的感觉。

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

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

相关文章

目标检测算法之YOLOv5的应用实例(医疗影像辅助诊断领域应用的详解)

在医疗影像辅助诊断领域,YOLOv5可以被应用于快速而准确地识别和定位医学影像中的关键结构,比如肿瘤、器官或病变区域。这有助于医生更有效地分析影像资料,提高诊断的准确性和效率。以下是一个使用YOLOv5在医学影像上进行病灶检测的基本代码示例: import cv2 import torch …

Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

sqlserver 子查询 =,in ,any,some,all的用法

在 SQL Server 中&#xff0c;子查询常用于嵌套在主查询中的子句中&#xff0c;以便根据子查询的结果集来过滤主查询的结果&#xff0c;或者作为主查询的一部分来计算结果。 以下是 、IN、ANY、SOME 和 ALL 运算符在子查询中的用法示例&#xff1a; 使用 运算符进行子查询&a…

android11以上SD卡存储权限适配申请问题

在Android 11&#xff08;API级别30&#xff09;及以上版本中&#xff0c;应用需要获得MANAGE_EXTERNAL_STORAGE权限。这个权限允许应用访问设备上的所有文件&#xff0c;而不仅仅是它自己的文件。然而&#xff0c;由于这个权限对用户的隐私有潜在的影响&#xff0c;因此Google…

Java-String字符串的常见方法总结

常用方法 1.charAt(int index)方法和tocharArray()方法 charAt(int index)方法&#xff1a;括号里传入整型参数&#xff0c;可以获取到该下标位置的String数组内容&#xff0c;通常用于遍历字符串。 tocharArray()方法&#xff1a;将字符串转化为char类型&#xff0c;再存入c…

【初始RabbitMQ】工作队列的实现

工作队列 工作队列&#xff08;又称为任务队列&#xff09;的主要思想是避免立即执行资源密集型任务&#xff0c;而不得不等待它完成。 相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进 程将弹出任务并最终执行作业。当有多个工作线程…

【NI-DAQmx入门】调整数据记录长度再进行数据处理

需要注意的是&#xff0c;初学者很容易造成一个大循环&#xff0c;导致采集循环的执行时间过长&#xff0c;最佳操作是采集循环只干采集的事&#xff0c;另起一个循环做数据拆解或分析。 有时需要以一定的采样率获取数据并记录所需的长度。然而&#xff0c;在处理这些数据时&am…

QT+OSG/osgEarth编译之八十八:osgdb_pic+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_pic)

文章目录 一、osgdb_pic介绍二、文件分析三、pro文件四、编译实践一、osgdb_pic介绍 PIC(Pixel Image Format)是一种用于存储和表示图像数据的文件格式。它最初由软件公司Softimage开发,用于存储计算机生成的图像和动画序列。 PIC格式使用无损压缩算法,可以保存包含颜色和…

2-17作业

#!/bin/bash read zifu case $zifu in [[:lower:]]) echo "小写字母" ;; [0-9]) echo "是数字字符" ;; [[:upper:]]) echo "是大写字母" ;; esac #!/bin/bash arr(ls ~) len${#arr…

每日OJ题_算法_递归⑤力扣50. Pow(x, n)

目录 力扣50. Pow(x, n) 解析代码 力扣50. Pow(x, n) 50. Pow(x, n) 难度 中等 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.0000…

把Activity当做dialog对话框使用

1、引言 在安卓开发中对话框的使用是不可避免的&#xff0c;但是原生的对话框用起来总感觉差点意思&#xff0c;而且位置不好控制&#xff0c;在与界面的交互上也不够灵活&#xff0c;没有像activity那样的生命周期方法&#xff0c;以至于某些特殊的功能无法实现。此时我们就希…

Android Studio新建EMPTY,提示Gradle下载失败,Connect timed out

Android Studio新建EMPTY&#xff0c;提示Gradle下载失败&#xff0c;Connect timed out 找到gradle-wrapper.properites文件&#xff0c;替换distributeionUrl为腾讯镜像&#xff0c;就好了&#xff0c;网上找了好久&#xff0c;就这个有效&#xff0c;是在这里Android导入项…

【分享】图解ADS+JLINK调试ARM

文章是对LPC2148而写的&#xff0c;但是对三星的44B0芯片同样适用&#xff0c;只需要在选择时将相应的CPU选择的S3C44B0就可以了。 JLINK在ADS下调试心得 前两天一个客户用jlink在ADS下调试LPC2148总报错&#xff0c;这个错误我之前在调试LPC2200的时候也碰到过&#xff0c;后…

ESP32学习(2)——点亮LED灯

1.前期准备 开发板原理图如下&#xff1a; 可见LED灯接在了GPIO2口 那么要如何编写代码控制GPIO口的电平高低呢&#xff1f; 我们可以参考micropython的官方文档Quick reference for the ESP32 — MicroPython latest documentation 可见&#xff0c;需要导入machine包 若要…

[嵌入式系统-24]:RT-Thread -11- 内核组件编程接口 - 网络组件 - TCP/UDP Socket编程

目录 一、RT-Thread网络组件 1.1 概述 1.2 RT-Thread支持的网络协议栈 1.3 RT-Thread如何选择不同的网络协议栈 二、Socket编程 2.1 概述 2.2 UDP socket编程 2.3 TCP socket编程 2.4 TCP socket收发数据 一、RT-Thread网络组件 1.1 概述 RT-Thread 是一个开源的嵌入…

Springboot 配置使用 Elasticsearch

一、安装Elasticsearch 1、Windows安装 Windows安装比较简单&#xff0c;ES官网Download Elasticsearch | Elastic下载压缩包&#xff0c;解压出来&#xff0c; bin 目录下有个elasticsearch.bat&#xff0c;双击&#xff0c;就运行起来了。 然后在浏览器输入localhost:9200…

php基础学习之作用域和静态变量

作用域 变量&#xff08;常量&#xff09;能够被访问的区域&#xff0c;变量可以在常规代码中定义&#xff0c;也可以在函数内部定义 变量的作用域 在 PHP 中作用域严格来说分为两种&#xff0c;但是 PHP内部还定义一些在严格意义之外的一种&#xff0c;所以总共算三种—— 局部…

《Go 简易速速上手小册》第1章:Go 语言基础(2024 最新版)

文章目录 1.1 Go 语言的安装与环境配置1.1.1 基础知识讲解案例 Demo&#xff1a;简单的 Go 程序 1.1.2 重点案例&#xff1a;搭建一个 Go Web 服务准备工作步骤 1&#xff1a;创建项目目录步骤 2&#xff1a;编写 Web 服务代码步骤 3&#xff1a;运行你的 Web 服务步骤 4&#…

RM电控工程讲义

HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) 是一个回调函数&#xff0c;通常在STM32的HAL库中用于处理CAN&#xff08;Controller Area Network&#xff09;接收FIFO 0中的消息。当CAN接口在FIFO 0中有待处理的消息时&#xff0c;这个函数会被调用。 HAL库C…

OpenAI 生成视频模型 Sora 论文翻译

系列文章目录 前言 视频生成模型作为世界模拟器 本技术报告的重点是 (1) 将所有类型的视觉数据转换为统一表示&#xff0c;以便对生成模型进行大规模训练的方法&#xff0c;以及 (2) 对索拉的能力和局限性的定性评估。 该报告不包括模型和实现细节。 许多先前的工作使用各种方…