1. 程式人生 > 其它 >2020.12.08:學習筆記-高併發程式設計(一)

2020.12.08:學習筆記-高併發程式設計(一)

在檸檬水攤上,每一杯檸檬水的售價為5美元。
顧客排隊購買你的產品,(按賬單 bills 支付的順序)一次購買一杯。
每位顧客只買一杯檸檬水,然後向你付 5 美元、10 美元或 20 美元。你必須給每個顧客正確找零,也就是說淨交易是每位顧客向你支付 5 美元。
注意,一開始你手頭沒有任何零錢。
如果你能給每位顧客正確找零,返回true,否則返回 false。
輸入:[5,5,5,10,20]
輸出:true
解釋:
前 3 位顧客那裡,我們按順序收取 3 張 5 美元的鈔票。
第 4 位顧客那裡,我們收取一張 10 美元的鈔票,並返還 5 美元。
第 5 位顧客那裡,我們找還一張 10 美元的鈔票和一張 5 美元的鈔票。
由於所有客戶都得到了正確的找零,所以我們輸出 true。
/*
 *直接模擬: 
 *遍歷陣列,遇到5,10,20就各自數量加1;
 *1.當遇到10時 if(5的數量為0) return false; else 5數量--
 *2.當遇到20時,if(5和10的數量>0) 各--;else if(5的數量>=3) 5數量 -=3; else return false;
 */
class Solution {
    public boolean lemonadeChange(int[] bills) {
        int five = 0;
        int ten = 0;

        for(int bill:bills){
            if(bill==5){
                five++;
            }else if(bill==10){
                if(five==0){
                    return false;
                }
                five--;
                ten++;
            }else {
                if(five>0&&ten>0){
                    five--;
                    ten--;
                }else if(five>=3){
                    five -=3;
                }else{
                    return false;
                }
            }
        }
        return true;
    }
}