代码随想录算法训练营第35天 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

860. 柠檬水找零

class Solution {
    public boolean lemonadeChange(int[] bills) {
        int five = 0;
        int ten = 0;
        
        for(int bill : bills) {
            if(bill == 5) {
                // 直接接收 5 美元的钞票
                five++;
            } else if(bill == 10) {
                // 收到 10 美元的钞票,需要找回 5 美元的零钱
                if(five == 0) return false;
                five--;
                ten++;
            } else {
                // 收到 20 美元的钞票,需要找回 15 美元的零钱
                // 优先使用 10 美元和 5 美元的零钱,然后尝试使用三张 5 美元的零钱
                if(ten > 0 && five > 0) {
                    ten--;
                    five--;
                } else if(five >= 3) {
                    five -= 3;
                } else {
                    return false;
                }
            }
        }
        
        return true;
    }
}

通过模拟整个交易过程来解决这个问题。在这个过程中,需要跟踪你手头有多少 5 美元和 10 美元的钞票。每当有人支付 5 美元时,可以直接接受付款。当有人支付 10 美元时,需要有一张 5 美元的钞票来找零。当有人支付 20 美元时,需要有一张 10 美元和一张 5 美元的钞票或者三张 5 美元的钞票来找零。如果在任何时候不能找零,那么返回 false。否则,可以通过整个过程,返回 true

你可能感兴趣的:(代码随想录算法训练营,算法,数据结构,leetcode)