LeetCode 🟢 860. Lemonade Change
🔗 🟢 860. Lemonade Change 1286
tags: Weekly Contest 91
陣列(Array)
貪心(Greedy)
模擬(Simulation)
題意
你有一個檸檬水攤位,每杯檸檬水賣 元。顧客們按照順序排隊購買你的檸檬水,每次按順序點一杯檸檬水(按訂單指定的順序)。
每個顧客只買一杯檸檬水,並且每位顧客都會付 元、 元或 元的硬幣。
給定一個整數陣列 ,其中 是第 位顧客支付的硬幣,如果你能為每位顧客提供正確的找零,則返回 ,否則返回 。
注意:一開始你手上沒有任何硬幣。
思路:貪心(Greedy)
首先分類討論三種情況:
- 顧客支付 元,我們不需要找零。
- 顧客支付 元,我們需要找 個 元給顧客。
- 顧客支付 元,此時可以找 個 元和 個 元硬幣、或 個 元硬幣。
- 如果有 元硬幣,則應優先找 元硬幣,因為在總金額不變的情況下,保留 元硬幣可以有更高的彈性。
- 如果沒有 元硬幣,則只能找 個 元硬幣。
注意到我們不會使用到 元硬幣,因此只需要維護 元硬幣和 元硬幣的數量即可。
在找零時可以先假設有足夠的 元硬幣,這樣可以把檢查移到找零後,使得程式碼較為整潔。若找零後 元硬幣的數量為負數,則代表無法找零,直接返回 。
複雜度分析
- 時間複雜度:,其中 為顧客數量。
- 空間複雜度:,只需要常數空間來儲存硬幣數量。
1 | class Solution: |
1 | class Solution { |
寫在最後
Cover photo is remixed from @吃肥皂泡泡, thanks for their work!
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus