[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 题目总结

原文地址:https://www.cnblogs.com/cnoodle/p/13070225.html