个人网站icp备案网,网络推广竞价是什么,表格制作,深圳网站设计公司怎么做题目 在柠檬水摊上#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品#xff0c;#xff08;按账单 bills 支付的顺序#xff09;一次购买一杯。 每位顾客只买一杯柠檬水#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零#xf…题目 在柠檬水摊上每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品按账单 bills 支付的顺序一次购买一杯。 每位顾客只买一杯柠檬水然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零也就是说净交易是每位顾客向你支付 5 美元。 注意一开始你手头没有任何零钱。 给你一个整数数组 bills 其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零返回 true 否则返回 false 。 示例 1 输入bills [5,5,5,10,20] 输出true 解释 前 3 位顾客那里我们按顺序收取 3 张 5 美元的钞票。 第 4 位顾客那里我们收取一张 10 美元的钞票并返还 5 美元。 第 5 位顾客那里我们找还一张 10 美元的钞票和一张 5 美元的钞票。 由于所有客户都得到了正确的找零所以我们输出 true。 示例 2 输入bills [5,5,10,10,20] 输出false 解释 前 2 位顾客那里我们按顺序收取 2 张 5 美元的钞票。 对于接下来的 2 位顾客我们收取一张 10 美元的钞票然后返还 5 美元。 对于最后一位顾客我们无法退回 15 美元因为我们现在只有两张 10 美元的钞票。 由于不是每位顾客都得到了正确的找零所以答案是 false。
解题思路 对所有顾客付的钱bills做遍历分三种情况bill为5元10元和20元。bill为5元时肯定能找零直接返回truebill为10元时需要确定有没有保留5元否则返回falsebill为20元时需要确定有没有保留10元和5元优先消耗10元的如果没有则返回false。
代码实现
class Solution {
public:bool lemonadeChange(vectorint bills) {int five 0, ten 0;for (int bill : bills) {// 情况一if (bill 5) five;// 情况二if (bill 10) {if (five 0) return false;ten;five--;}// 情况三if (bill 20) {// 优先消耗10美元因为5美元的找零用处更大能多留着就多留着if (five 0 ten 0) {five--;ten--;} else if (five 3) {five - 3;} else return false;}}return true;}
};