【Leetcode】1710. Maximum Units on a Truck
阿新 • • 發佈:2021-02-06
技術標籤:LC 貪心、動態規劃與記憶化搜尋leetcode資料結構
題目地址:
https://leetcode.com/problems/maximum-units-on-a-truck/
給定一系列物品,每個物品 i i i有 A [ i ] [ 0 ] A[i][0] A[i][0]這麼多個,並且價值是 A [ i ] [ 1 ] A[i][1] A[i][1]。有個容量為 s s s的揹包(意味著可以最多放 s s s個物品),問能容納的物品最大價值。
思路是貪心。由於每個物品的size都是 1 1 1,顯然我們應該優先放價值更大的物品,直到放不下為止。程式碼如下:
import java.util. Arrays;
public class Solution {
public int maximumUnits(int[][] boxTypes, int truckSize) {
int res = 0;
// 按價值從大到小排序
Arrays.sort(boxTypes, (b1, b2) -> -Integer.compare(b1[1], b2[1]));
for (int[] boxType : boxTypes) {
// 能全放進去,就全放進去
if (truckSize >= boxType[0]) {
res += boxType[0] * boxType[1];
truckSize -= boxType[0];
} else {
// 不能全放進去,則儘量放,並退出迴圈
res += truckSize * boxType[1];
break;
}
}
return res;
}
}
時間複雜度
O
(
n
log
n
)
O(n\log n)
O(nlogn),空間
O
(
1
)
O(1)
O(1)。