860. Lemonade Change
Intuition¶
The problem requires determining if we can provide the correct change for each customer in a line, given that customers will pay with a 5,10, or 20 bill. The key is to ensure that for each10 or 20 bill received, we have enough smaller bills (preferably5 bills) to give back the correct change.
Approach¶
- Initialize two counters,
fiveandten, to keep track of the number of 5 and10 bills we have. - Iterate through the array of bills:
- If the bill is $5, increment the
fivecounter. - If the bill is 10, check if we have at least one5 bill to give as change. If so, decrement the
fivecounter and increment thetencounter. If not, returnfalse. - If the bill is 20, prioritize giving one10 and one 5 as change (if possible). If not, try to give three5 bills. If neither is possible, return
false. - If we can successfully provide change for all customers, return
true.
Complexity¶
- Time complexity: O(n)
-
We only loop through the array of bills once.
-
Space complexity: O(1)
- Only a constant amount of extra space is used for the
fiveandtencounters.
Code¶
```java 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 { // bill == 20
if (ten > 0 && five > 0) {
ten--;
five--;
} else if (five >= 3) {
five -= 3;
} else {
return false;
}
}
}
return true;
}
}