Isaac Emmanuel
09 Sept 2026•EasyGo / Python / TypeScript

Lemonade Change

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.

Complexity

O(n) time and O(1) space.

Solution files

Go•lemonade-change/solution.go
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
}
Python•lemonade-change/solution.py
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
TypeScript•lemonade-change/solution.ts
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;
}