织梦示范网站,成都微信微网站建设,网站建设 APP开发销售怎么做,商城源码哪个品牌好提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 目录
前言
一、问题描述
二、解法分析
总结 前言
提示#xff1a;这里可以添加本文要记录的大概内容#xff1a;
例如#xff1a;随着人工智能的不断发展#xff0… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 目录
前言
一、问题描述
二、解法分析
总结 前言
提示这里可以添加本文要记录的大概内容
例如随着人工智能的不断发展机器学习这门技术也越来越重要很多人都开启了学习机器学习本文就介绍了机器学习的基础内容。 提示以下是本篇文章正文内容下面案例可供参考
一、问题描述
在柠檬水摊上每一杯柠檬水的售价为5美元。 顾客排队购买你的产品按账单bills支付的顺序一次购买一杯。 每位顾客只买一杯柠檬水然后向你付5美元、10美元或20美元。你必须给每个顾客正确找零也就是说净交易是每位顾客向你支付5美元。
输入[5,5,5,10,20] 输出true 解释 前 3 位顾客那里我们按顺序收取 3 张 5 美元的钞票。 第 4 位顾客那里我们收取一张 10 美元的钞票并返还 5 美元。 第 5 位顾客那里我们找还一张 10 美元的钞票和一张 5 美元的钞票。 由于所有客户都得到了正确的找零所以我们输出 true。
输入[5,5,10] 输出true
输入[10,10] 输出false
输入[5,5,10,10,20] 输出false 解释 前 2 位顾客那里我们按顺序收取 2 张 5 美元的钞票。 对于接下来的 2 位顾客我们收取一张 10 美元的钞票然后返还 5 美元。 对于最后一位顾客我们无法退回 15 美元因为我们现在只有两张 10 美元的钞票。 由于不是每位顾客都得到了正确的找零所以答案是 false。
二、解法分析
解题思路
当遇到5时直接收下
当遇到10时需要收下并支出一个5
当遇到20时需要收下并支出105或者555
那么整个过程中需要关注的就是10和5的已经收下的数量
需要两个计数器分别记录当前有几个5几个10
收入就意味着计数器1支出就意味着计数器-1当收下的面额是20且10的数量是0是支出的5的数量一次是3这个要注意。
代码示例
public void 找零test() {int[] a {5,5,10,10,20};// a5: 记录已收下的5的数量, 初始值为0; a10同理int a5 0, a10 0;// 如果首个元素比5大, 则第一个就找不开if (a[0] 5) {System.out.println(false);return;}for (int i : a) {// 此处是当循环没有结束时, 对上一轮过后结果进行判断, 如果5或者10透支了, 则判定为失败if (a5 0 || a10 0) {System.out.println(false);return;}// 当本次要收下的是5时, a5计数器1, 继续下一轮if (i 5) {a5;continue;}// 当本次要收下的是10时, a5计数器-1, a10计数器1, 继续下一轮if (i 10) {a5--;a10;continue;}// 当本次要收下的是20且已收下的10大于等于1张, 优先支出1张10, a10计数器-1, a5计数器-1, 继续下一轮if (a10 0) {a10--;a5--;continue;}// 当本次要收下的是20且已收下的10小于1张, 支出3张5, 继续下一轮a5 a5 - 3;}// 此处用来对最后一轮过后, 是否透支10或者5进行校验, 任何一个透支则为失败if (a5 0 || a10 0) {System.out.println(false);return;}// 没有被以上任何一种失败的命中, 则最终成功System.out.println(true);
} 总结
没啥难度简单到有手就行