1710. Maximum Units on a Truck
1710. Maximum Units on a Truck
這個題目的情境像是,我們有一座倉庫有不同的貨物分裝在不同但是統一大小的箱子內,每個箱子大小一致,但是箱子內的商品數量(numberOfUnitsPerBox)不一樣,每個箱子的庫存數量(numberOfBoxes)也不同。我們要把商品搬到貨車上,貨車上的空間有限,總共可以儲存 N 個箱子(truckSize)。
此題目要求我們要盡可能地在貨車上滿載最多的商品(numberOfUnitsPerBox)。
要解決這個問題,我們在選擇的時候有幾個條件:
如果我們只剩下一個空位,那一定是選擇每箱有最多商品的選項,或是換個角度想如果箱子數量遠大於車子可以裝卸的數量,我們直接把該貨物裝滿車子
每次能放進去車子的數量取決於
- 車子內還剩下多少空間(remaining)
- 倉庫內還有多少庫存(numberOfBoxes)
- 為了要完成第一個條件,我們要盡可能地先去查看擁有最多商品數量(numberOfUnitsPerBox)的箱子 L3。一開始將 boxTypes 透過 numberOfUnitsPerBox 來降冪排序。
- 第二個條件,可以用兩個方法追蹤:用了多少空間、還剩下多少空間。
class Solution:
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
boxTypes.sort(key=lambda x: -x[1])
remaining = truckSize
ans = 0
for numberOfBoxes, numberOfUnitsPerBox in boxTypes:
if remaining == 0: break
availableBoxes = min(numberOfBoxes, remaining)
ans += availableBoxes * numberOfUnitsPerBox
remaining -= availableBoxes
return ans
class Solution:
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
boxTypes.sort(key=lambda x: -x[1])
space_used = 0
ans = 0
for numberOfBoxes, numberOfUnitsPerBox in boxTypes:
if space_used >= truckSize: break
availableBoxes = min(numberOfBoxes, truckSize - space_used)
ans += availableBoxes * numberOfUnitsPerBox
space_used += availableBoxes
return ans