【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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

  1. 判断付款
  2. 5块直接收下;数量+1
  3. 10块判断5块数量是否大于1;
    yes: ten += 1 five-=1
    no: return false
  4. 判断是否有至少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


posted @ 2021-12-28 22:59  jucw  阅读(146)  评论(0编辑  收藏  举报