在柠檬水摊上,每一杯柠檬水的售价为 5
美元。
顾客排队购买你的产品,(按账单 bills
支付的顺序)一次购买一杯。
每位顾客只买一杯柠檬水,然后向你付 5
美元、10
美元或 20
美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5
美元。
注意,一开始你手头没有任何零钱。
如果你能给每位顾客正确找零,返回 true
,否则返回 false
。
示例 1:
输入:[5,5,5,10,20]
输出:true
解释:
前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。
第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。
第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。
由于所有客户都得到了正确的找零,所以我们输出 true。
提示:
0 <= bills.length <= 10000
bills[i]
不是5
就是10
或是20
分析:
由于顾客支付的不是 5
美元就是 10美元
或是 20美元,所以找零方式只有5美元和15美元。而找15美元有两种方式,一种是找一张10美元,另一种是找3张5美元的。所以我们可以定义两个变量men_5,men_10,分别记录5美元和10美元的有多少张。当能找零时,根据找零的方式使men_5和men_10对应的减少。当所有顾客都能找零时,程序结束,返回true。如果不能找零的话,程序结束,返回false。
int n = bills.size(), i;
int men_5 = 0, men_10 = 0;
for (i = 0; i < n; i++)
{
if (bills[i] == 5)
{
men_5++;
continue;
}
else if (bills[i] == 10)
{
if (men_5 < 1)
{
break;
}
else
{
men_5--;
men_10++;
}
}
else
{
if (men_10 >= 1 && men_5 >= 1)
{
men_10--;
men_5--;
}
else if (men_5 >= 3)
men_5 = men_5 - 3;
else
break;
}
}
if (i == n)
return true;
else
return false;
程序通过LeetCode的测试。