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!