leetcode 2241. 设计一个 ATM 机器 中等
一个 ATM 机器,存有 5 种面值的钞票:20 ,50 ,100 ,200 和 500 美元。初始时,ATM 机是空的。用户可以用它存或者取任意数目的钱。
取款时,机器会优先取 较大 数额的钱。
- 比方说,你想取
$300,并且机器里有2张$50的钞票,1张$100的钞票和1张$200的钞票,那么机器会取出$100和$200的钞票。 - 但是,如果你想取
$600,机器里有3张$200的钞票和1张$500的钞票,那么取款请求会被拒绝,因为机器会先取出$500的钞票,然后无法取出剩余的$100。注意,因为有$500钞票的存在,机器 不能 取$200的钞票。
请你实现 ATM 类:
ATM()初始化 ATM 对象。void deposit(int[] banknotesCount)分别存入$20,$50,$100,$200和$500钞票的数目。int[] withdraw(int amount)返回一个长度为5的数组,分别表示$20,$50,$100,$200和$500钞票的数目,并且更新 ATM 机里取款后钞票的剩余数量。如果无法取出指定数额的钱,请返回[-1](这种情况下 不 取出任何钞票)。
示例 1:
输入: ["ATM", "deposit", "withdraw", "deposit", "withdraw", "withdraw"] [[], [[0,0,1,2,1]], [600], [[0,1,0,1,1]], [600], [550]] 输出: [null, null, [0,0,1,0,1], null, [-1], [0,1,0,0,1]]解释: ATM atm = new ATM(); atm.deposit([0,0,1,2,1]); // 存入 1 张 $100 ,2 张 $200 和 1 张 $500 的钞票。 atm.withdraw(600); // 返回 [0,0,1,0,1] 。机器返回 1 张 $100 和 1 张 $500 的钞票。机器里剩余钞票的数量为 [0,0,0,2,0] 。 atm.deposit([0,1,0,1,1]); // 存入 1 张 $50 ,1 张 $200 和 1 张 $500 的钞票。// 机器中剩余钞票数量为 [0,1,0,3,1] 。 atm.withdraw(600); // 返回 [-1] 。机器会尝试取出 $500 的钞票,然后无法得到剩余的 $100 ,所以取款请求会被拒绝。// 由于请求被拒绝,机器中钞票的数量不会发生改变。 atm.withdraw(550); // 返回 [0,1,0,0,1] ,机器会返回 1 张 $50 的钞票和 1 张 $500 的钞票。
提示:
banknotesCount.length == 50 <= banknotesCount[i] <= 10^91 <= amount <= 10^9- 总共 最多有
5000次withdraw和deposit的调用。 - 函数
withdraw和deposit至少各有 一次 调用。
分析:按照要求写模块即可。注意到取钱的时候需要一次得到能取多少张。
typedef struct {int num[5];//分别代表20,50,100,200,500的钞票数量
} ATM;ATM* aTMCreate() {ATM *p=(ATM*)malloc(sizeof(ATM));for(int i=0;i<5;++i)p->num[i]=0;//初始化钞票数量为0return p;
}void aTMDeposit(ATM* obj, int* banknotesCount, int banknotesCountSize) {for(int i=0;i<banknotesCountSize;++i)obj->num[i]+=banknotesCount[i];//更新钞票数量直接加上即可return;
}int* aTMWithdraw(ATM* obj, int amount, int* retSize) {int f=1;int cnt[5]={20,50,100,200,500},temp[5];int *ans=(int*)malloc(sizeof(int)*5);*retSize=5;for(int i=0;i<5;++i)ans[i]=0,temp[i]=obj->num[i];for(int i=4;i>=0;--i){if(amount>0&&temp[i]>0)//能减就尽量减{int l1=amount/cnt[i],l2=temp[i];amount=amount-fmin(l1,l2)*cnt[i];ans[i]+=fmin(l1,l2),temp[i]-=fmin(l1,l2);}if(amount==0)break;}if(amount!=0)*retSize=1,ans[0]=-1;else for(int i=0;i<5;++i)obj->num[i]=temp[i];
/*for(int i=0;i<5;++i)printf("i=%d num=%d\n",i,obj->num[i]);printf("\n");
*/return ans;
}void aTMFree(ATM* obj) {free(obj);return;
}
/*** Your ATM struct will be instantiated and called as such:* ATM* obj = aTMCreate();* aTMDeposit(obj, banknotesCount, banknotesCountSize);* int* param_2 = aTMWithdraw(obj, amount, retSize);* aTMFree(obj);
*/
相关文章:
leetcode 2241. 设计一个 ATM 机器 中等
一个 ATM 机器,存有 5 种面值的钞票:20 ,50 ,100 ,200 和 500 美元。初始时,ATM 机是空的。用户可以用它存或者取任意数目的钱。 取款时,机器会优先取 较大 数额的钱。 比方说,你想…...
IO模型与NIO基础
File类 File类主要是JAVA为文件这块的操作(如删除、新建等)而设计的相关类File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较 创建一个文件/文件夹 删除文件/文件夹 获取文件/文件夹 判断文件/文件夹是否存在 对文件夹进…...
上门按摩系统架构与功能分析
一、系统架构 服务端:Java(最低JDK1.8,支持JDK11以及JDK17)数据库:MySQL数据库(标配5.7版本,支持MySQL8)ORM框架:Mybatis(集成通用tk-mapper,支持…...
ubuntu安装ssh9.2
删除旧版本: dpkg --list|grep ssh apt remove sshwget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.2p1.tar.gz tar xzvf openssh-9.2p1.tar.gz cd openssh-9.2p1 #下载依赖#开始编译安装 ./configure && make && make inst…...
linux wsl配置 redis远程连接
✅ 1. 修改 Redis 配置文件 在 WSL 的 Redis 配置文件中,找到 redis.conf 或 /etc/redis/redis.conf 文件,编辑以下配置项: ➡️ 更新 bind 配置项 将 bind 127.0.0.1 ::1 修改为: bind 0.0.0.0这样,Redis 将监听所…...
JVM 优化指南
JVM 优化指南 1. JVM 参数配置 1.1 基础参数配置 设置堆内存大小 -Xms2048m -Xmx2048m 设置新生代大小 -Xmn1024m 设置元空间大小 -XX:MetaspaceSize256m -XX:MaxMetaspaceSize256m 设置线程栈大小 -Xss512k1.2 垃圾回收器配置 使用 G1 垃圾回收器 -XX:UseG1GC 设置期望停顿…...
关机重启后,GitLab服务异常
整理机房,关闭了所有主机重新上架。 上架后开机,所有主机硬件启动正常。 其中一台GitLab服务器启动正常,使用gitlab-ctl status查看服务业正常。 但使用web登陆却失败,如下图: 反复测试,发现无论使用正确密码还是错误密码都是同样的提示。很大可能是数据库的问题。 使…...
谷粒商城-高级篇完结-Sleuth+Zipkin 服务链路追踪
1、基本概念和整合 1.1、为什么用 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位 。主要体现在&#…...
C语言基本知识复习浓缩版:标识符、函数、进制、数据类型
C语言基本知识复习浓缩版:标识符、函数、进制、数据类型 【c语言期末复习3小时速成【完整全集】期末速成含考试题c语言期末速成突击复习C语言补考C语言期末大一】 B站看到的复习C语言视频,感觉非常棒,就跟着进行了一下学习。众所周知&#…...
selenium已经登陆了 我怎么查看 网页 在fRequest xhr 的数据呢
在使用 Selenium 登录网页后,查看网页的 XHR 请求数据可以通过以下几种方法: ### 1. 使用浏览器开发者工具 - **手动查看**: - 打开浏览器的开发者工具(按 F12 或右键点击页面元素选择“检查”)。 - 切换到“Netw…...
Bash语言的数据库编程
Bash语言的数据库编程 引言 在现代软件开发中,数据库编程是一个不可或缺的部分。从小型项目到大型系统,数据库通常是存储和管理数据的核心。然而,许多开发者往往将焦点放在高级编程语言如Python、Java或C#上,忽视了Shell脚本语言…...
易支付二次元网站源码及部署教程
易支付二次元网站源码及部署教程 引言 在当今数字化时代,二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求,搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程…...
ios脚本巨魔商店多巴胺越狱基本操作教程
准备工作 确认设备兼容性:A9-A11(iPhone6s-X):iOS15.0-16.6.1;A12-A14(iPhoneXR-12PM):iOS15.0-16.5.1;A15-A16(iPhone13-…...
ScratchLLMStepByStep:SFT之分类微调
1. 引言 前面我们花了三节内容来介绍预训练,包括如何从零搭建、如何加速运算、如何分布式加速训练,本节开始我们将进入监督微调(SFT)阶段。 常见语言模型的微调任务有两类,分类微调和指令微调。 分类微调模型通常是…...
人工智能知识分享第十天-机器学习_聚类算法
聚类算法 1 聚类算法简介 1.1 聚类算法介绍 一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。 目的是将数据集中的对象分成多个簇(Cluster),使得同一簇内的对象相似度较高,而不同簇之间的对象相…...
MySQL和Hive中的行转列、列转行
水善利万物而不争,处众人之所恶,故几于道💦 文章目录 MySQL1.行转列2.列转行 Hive1.行转列2.列转行(1)侧窗(2)union MySQL 1.行转列 把多行转成列。直接group,sum(if()) 2.列转行 Hive 1.行转列 select name,sum(if(kmshuxu…...
汽车供应链关键节点:物流采购成本管理全解析
在汽车行业,供应链管理是一项至关重要的任务。汽车制造从零部件的生产到整车的交付,涉及多个环节,其中物流、采购与成本管理是核心节点。本文将深入分析这些关键环节,探讨如何通过供应商管理系统及相关工具优化供应链管理。 一、…...
USB 驱动开发 --- Gadget 设备连接 Windows 免驱
环境信息 测试使用 DuoS(Arm CA53, Linux 5.10) 搭建方案验证环境,使用 USB sniff Wirekshark 抓包分析,合照如下: 注:左侧图中设备:1. 蓝色,USB sniff 非侵入工 USB 抓包工具;2. …...
计算机网络之---数据链路层的功能与作用
数据链路层概念 数据链路层(Data Link Layer)是计算机网络中的第二层,它位于物理层和网络层之间,主要负责数据在物理链路上的可靠传输。其基本功能是将网络层传来的数据分成帧,并负责在物理链路上可靠地传输这些数据帧…...
前端 图片上鼠标画矩形框,标注文字,任意删除
效果: 页面描述: 对给定的几张图片,每张能用鼠标在图上画框,标注相关文字,框的颜色和文字内容能自定义改变,能删除任意画过的框。 实现思路: 1、对给定的这几张图片,用分页器绑定…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
