• [LeetCode] 860. Lemonade Change


    At a lemonade stand, each lemonade costs $5

    Customers are standing in a queue to buy from you, and order one at a time (in the order specified by bills).

    Each customer will only buy one lemonade and pay with either a $5$10, or $20 bill.  You must provide the correct change to each customer, so that the net transaction is that the customer pays $5.

    Note that you don't have any change in hand at first.

    Return true if and only if you can provide every customer with correct change.

    Example 1:

    Input: [5,5,5,10,20]
    Output: true
    Explanation: 
    From the first 3 customers, we collect three $5 bills in order.
    From the fourth customer, we collect a $10 bill and give back a $5.
    From the fifth customer, we give a $10 bill and a $5 bill.
    Since all customers got correct change, we output true.
    

    Example 2:

    Input: [5,5,10]
    Output: true
    

    Example 3:

    Input: [10,10]
    Output: false
    

    Example 4:

    Input: [5,5,10,10,20]
    Output: false
    Explanation: 
    From the first two customers in order, we collect two $5 bills.
    For the next two customers in order, we collect a $10 bill and give back a $5 bill.
    For the last customer, we can't give change of $15 back because we only have two $10 bills.
    Since not every customer received correct change, the answer is false.

    Note:

    • 0 <= bills.length <= 10000
    • bills[i] will be either 510, or 20.

    柠檬水找零。

    在柠檬水摊上,每一杯柠檬水的售价为 5 美元。

    顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。

    每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。

    注意,一开始你手头没有任何零钱。

    如果你能给每位顾客正确找零,返回 true ,否则返回 false 。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/lemonade-change
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路是贪心。这里贪的是如果要找15美金,就一定要先尝试用10 + 5的组合而不是3个5的组合找钱。

    时间O(n)

    空间O(1)

    Java实现

     1 class Solution {
     2     public boolean lemonadeChange(int[] bills) {
     3         int five = 0;
     4         int ten = 0;
     5         for (int bill : bills) {
     6             if (bill == 5) {
     7                 five++;
     8             } else if (bill == 10) {
     9                 if (five == 0) {
    10                     return false;
    11                 }
    12                 five--;
    13                 ten++;
    14             } else {
    15                 if (five > 0 && ten > 0) {
    16                     five--;
    17                     ten--;
    18                 } else if (five >= 3) {
    19                     five -= 3;
    20                 } else {
    21                     return false;
    22                 }
    23             }
    24         }
    25         return true;
    26     }
    27 }

    LeetCode 题目总结

  • 相关阅读:
    WEB 3D SVG CAD 向量 几个实施(转)
    Dos.Common
    dos.orm
    php程序员招聘
    python之禅
    Electron
    MongoDB主从复制
    OSG开发概览
    从1-100中隔5个数去掉一个数,最后去掉的哪个数(如果数过一遍了从前端接着开始)?
    django/python日志logging 的配置以及处理
  • 原文地址:https://www.cnblogs.com/cnoodle/p/13070225.html
Copyright © 2020-2023  润新知