Skip to content

Latest commit

 

History

History
77 lines (67 loc) · 2.36 KB

860. 柠檬水找零-Easy.md

File metadata and controls

77 lines (67 loc) · 2.36 KB

在柠檬水摊上,每一杯柠檬水的售价为 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

示例 2:

输入:[5,5,10]
输出true

示例 3:

输入:[10,10]
输出false

示例 4:

输入:[5,5,10,10,20]
输出false
解释 2 位顾客那里我们按顺序收取 2  5 美元的钞票对于接下来的 2 位顾客我们收取一张 10 美元的钞票然后返还 5 美元对于最后一位顾客我们无法退回 15 美元因为我们现在只有两张 10 美元的钞票由于不是每位顾客都得到了正确的找零所以答案是 false

提示:

  • 0 <= bills.length <= 10000
  • bills[i] 不是 5 就是 10 或是 20 

Solution

  • 时间复杂度:$O(N)$
  • 空间复杂度:$O(1)$
  • 找零时因为10元适应的case更少,在用户付20时,所以优先找10元的。
class Solution:
    def lemonadeChange(self, bills: List[int]) -> bool:
        five, ten = 0, 0
        for i in range(len(bills)):
            if bills[i] == 5:
                five += 1
            elif bills[i] == 10:
                if five == 0:
                    return False
                else:
                    five -= 1
                ten += 1
            else:
                if five == 0 or ten == 0:
                    if five < 3:
                        return False
                    else:
                        five -= 3
                else:
                    ten -= 1
                    five -= 1

        return True