Track five- and ten-dollar bills, preferring a ten plus a five when making fifteen dollars of change because fives are more flexible.
Complexity
O(n) time and O(1) space.
Determine whether exact change can be returned to every lemonade customer in sequence.
Track five- and ten-dollar bills, preferring a ten plus a five when making fifteen dollars of change because fives are more flexible.
O(n) time and O(1) space.
package main
func lemonadeChange(bills []int) bool {
fives, tens := 0, 0
for _, bill := range bills {
switch {
case bill == 5:
fives++
case bill == 10 && fives > 0:
fives--
tens++
case bill == 20 && tens > 0 && fives > 0:
tens--
fives--
case bill == 20 && fives >= 3:
fives -= 3
default:
return false
}
}
return true
}
class Solution:
def lemonadeChange(self, bills: list[int]) -> bool:
fives = tens = 0
for bill in bills:
if bill == 5: fives += 1
elif bill == 10:
if not fives: return False
fives, tens = fives - 1, tens + 1
elif tens and fives: tens, fives = tens - 1, fives - 1
elif fives >= 3: fives -= 3
else: return False
return True
function lemonadeChange(bills: number[]): boolean {
let fives = 0;
let tens = 0;
for (const bill of bills) {
if (bill === 5) fives += 1;
else if (bill === 10) { if (fives === 0) return false; fives -= 1; tens += 1; }
else if (tens > 0 && fives > 0) { tens -= 1; fives -= 1; }
else if (fives >= 3) fives -= 3;
else return false;
}
return true;
}