IncredibleThings

导航

LeetCode – 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 5, 10, or 20.

这是一个关于找零的问题。首先,因为初始没有资本,而且每份柠檬水的售价是5美元。因此,5美元是最“珍贵”的找零资源。 
如果顾客给的是10美元,那么只能找给他一张5美元的。 
如果顾客给的是20美元,因为5美元比较稀缺,因此如果有10美元的钞票,则优先找给他10美元,然后再找一张5美元;否则的话,就直接给三张5美元的钞票。 
如果5美元的数量变为“负”,说明找零失败,返回False;否则就返回True。

class Solution {
    public boolean lemonadeChange(int[] bills) {
        Map<Integer, Integer> map = new HashMap<>();
        map.put(5,0);
        map.put(10,0);
        for(int bill : bills){
            if(bill == 5){
                map.put(5, map.get(5)+1);
            }
            else if(bill == 10){
                if(map.get(5) == 0){
                    return false;
                }
                map.put(5,map.get(5)-1);
                map.put(10,map.get(10)+1);
            }
            else if(bill == 20){
                
                if(map.get(5) == 0){
                    return false;
                }
                if(map.get(10) == 0 && map.get(5) < 3){
                    return false;
                }
                if(map.get(10) > 0 && map.get(5) == 0){
                    return false;
                }
                if(map.get(10) > 0){
                    map.put(10, map.get(10)-1);
                    map.put(5, map.get(5)-1);
                }
                else{
                    map.put(5,map.get(5)-3);
                }

            }
        }
        return true;
    }
}

  

posted on 2018-09-19 19:15  IncredibleThings  阅读(126)  评论(0编辑  收藏  举报