Lemonade Change
Problem Statement
You’re running a lemonade stand where each lemonade costs $5. Customers pay with $5, $10, or $20 bills, and you must provide correct change. Given an array of bills, determine if you can make change for every customer. This easy-level greedy problem tests your cash-handling skills—keep the change flowing!
Example
Input: bills = [5, 5, 5, 10, 20]
Output: true (5s for $10, $10+$5 for $20)
Input: bills = [5, 5, 10, 10, 20]
Output: false (not enough $5s for second $10)
Code
Java
Python
JavaScript
public class Solution {
public boolean lemonadeChange(int[] bills) {
int five = 0, ten = 0;
for (int bill : bills) {
if (bill == 5) five++;
else if (bill == 10) {
if (five == 0) return false;
five--; ten++;
} else {
if (ten > 0 && five > 0) {
ten--; five--;
} else if (five >= 3) {
five -= 3;
} else return false;
}
}
return true;
}
}
def lemonade_change(bills):
five = 0
ten = 0
for bill in bills:
if bill == 5:
five += 1
elif bill == 10:
if five == 0:
return False
five -= 1
ten += 1
else:
if ten > 0 and five > 0:
ten -= 1
five -= 1
elif five >= 3:
five -= 3
else:
return False
return True
function lemonadeChange(bills) {
let five = 0, ten = 0;
for (let bill of bills) {
if (bill === 5) five++;
else if (bill === 10) {
if (five === 0) return false;
five--; ten++;
} else {
if (ten > 0 && five > 0) {
ten--; five--;
} else if (five >= 3) {
five -= 3;
} else return false;
}
}
return true;
}
Explanation
- Greedy Choice: Use $10+$5 or 3×$5 for $20, prioritizing $10 when possible.
- Flow: Track $5 and $10 bills, fail if change can’t be made.
- Example: [5,5,5,10,20] → 3 $5s, use 1 for $10, use $10+$5 for $20.
Note
Time complexity: O(n), Space complexity: O(1). Keep the change simple!
