← Greedy

Lemonade Change

Easy
Python
def lemonade_change(bills):
    five=ten=0
    for b in bills:
        if b==5: five+=1
        elif b==10: ten+=1; five-=1
        else:
            if ten>0: ten-=1; five-=1
            else: five-=3
        if five<0: return False
    return True
Java
public boolean lemonadeChange(int[] bills){
    int five=0,ten=0;
    for(int b:bills){
        if(b==5) five++;
        else if(b==10){ten++;five--;}
        else{if(ten>0){ten--;five--;}else five-=3;}
        if(five<0) return false;
    } return true;
}

Key Insight

Greedy. Prefer $10 for $25 change. five=ten=0 chain assign.

Python → Java Differences

  • True/False vs true/false
  • Greedy coin tracking identical
  • five=ten=0 chain assign Python
Python
def lemonade_change(bills):
    five=ten=0
    for b in bills:
        if b==5: five+=1
        elif b==10: ten+=1; five-=1
        else:
            if ten>0: ten-=1; five-=1
            else: five-=3
        if five<0: return False
    return True
Java
public boolean lemonadeChange(int[] bills){
    int five=0,ten=0;
    for(int b:bills){
        if(b==5) five++;
        else if(b==10){ten++;five--;}
        else{if(ten>0){ten--;five--;}else five-=3;}
        if(five<0) return false;
    } return true;
}

Algorithm Steps

1. Track bills
2. Give change greedily
3. Prefer $10 for $25