日期:2026年6月21日
LeetCode 題目連結:1833. Maximum Ice Cream Bars
解題想法
寫起來像是簡單題的中等難度題。題目給定手上的現金 $coins$、冰淇淋的價格 $costs$,可以用任意順序購買冰淇淋,要找出最多可以購買幾支冰淇淋。只要先將 $costs$ 排序,再用 for 迴圈依序取出每支冰淇淋的價格 $cost$,如果 $coins \geq cost$,可以購買這支冰淇淋,將數量 $cnt += 1$,$coins -= cost$;反之,無法購買,中止迴圈。也可以用最小優先佇列 $pq$ 儲存價格,用 while 迴圈比較 $pq[0]$ 與 $coins$,如果 $coins \geq pq[0]$ 可以購買這支冰淇淋,移除 $pq[0]$、更新 $coins$ 及 $cnt$;跑完 while 迴圈之後回傳 $cnt$。
Python 程式碼
排序。Runtime: 79 ms, beats 69.30%. Memory: 30.83 MB, beats 70.23%.
class Solution:
def maxIceCream(self, costs: List[int], coins: int) -> int:
costs.sort()
cnt = 0
for cost in costs:
if coins >= cost:
coins -= cost
cnt += 1
else:
break
return cnt
最小優先佇列。Runtime: 43 ms, beats 94.73%. Memory: 32.00 MB, beats 66.20%.
import heapq
class Solution:
def maxIceCream(self, costs: List[int], coins: int) -> int:
heapq.heapify(costs)
cnt = 0
while costs and coins >= costs[0]:
coins -= heapq.heappop(costs)
cnt += 1
return cnt