【LeetCode】NO.860 柠檬水找零钱 (C++ & Python) [贪心算法]
@
题目:柠檬水找零钱
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。
每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。
注意,一开始你手头没有任何零钱。
给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lemonade-change
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
- 判断付款
- 5块直接收下;数量+1
- 10块判断5块数量是否大于1;
yes: ten += 1 five-=1
no: return false - 判断是否有至少1张10块1张5块或者3张5块;
否则return false;
代码
Python 版本:
class Solution:
def lemonadeChange(self, bills: List[int]) -> bool:
five_cnt, ten_cnt = 0, 0
for bill in bills:
if bill == 5:
five_cnt += 1
elif bill == 10:
ten_cnt += 1
if five_cnt < 1:
return False
five_cnt -= 1
else: # 判断20
if ten_cnt > 0 and five_cnt > 0:
ten_cnt -= 1
five_cnt -= 1
elif five_cnt > 2: #大于2说明至少有3张5块
five_cnt -= 3
else:
return False
return True
本文来自博客园,作者:jucw,转载请注明原文链接:https://www.cnblogs.com/Jucw/p/15743202.html