LeetCode 5641. 卡車上的最大單元數(排序,模擬)
阿新 • • 發佈:2021-01-09
技術標籤:LeetCode
文章目錄
1. 題目
請你將一些箱子裝在 一輛卡車 上。給你一個二維陣列 boxTypes ,其中 boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi]
:
- numberOfBoxesi 是型別 i 的箱子的數量。
- numberOfUnitsPerBoxi 是型別 i 每個箱子可以裝載的單元數量。
整數 truckSize 表示卡車上可以裝載 箱子 的 最大數量 。
只要箱子數量不超過 truckSize ,你就可以選擇任意箱子裝到卡車上。
返回卡車可以裝載 單元 的 最大 總數。
示例 1:
輸入:boxTypes = [[1,3],[2,2],[3,1]], truckSize = 4
輸出:8
解釋:箱子的情況如下:
- 1 個第一類的箱子,裡面含 3 個單元。
- 2 個第二類的箱子,每個裡面含 2 個單元。
- 3 個第三類的箱子,每個裡面含 1 個單元。
可以選擇第一類和第二類的所有箱子,以及第三類的一個箱子。
單元總數 = (1 * 3) + (2 * 2) + (1 * 1) = 8
示例 2:
輸入:boxTypes = [[5,10],[2,5],[4,7],[3,9]], truckSize = 10
輸出:91
提示:
1 <= boxTypes. length <= 1000
1 <= numberOfBoxesi, numberOfUnitsPerBoxi <= 1000
1 <= truckSize <= 10^6
https://leetcode-cn.com/problems/maximum-units-on-a-truck/
2. 解題
- 單元多的箱子優先
class Solution {
public:
int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
sort(boxTypes.begin (), boxTypes.end(),[&](auto a, auto b){
return a[1] > b[1];//單元多的優先
});
int cell = 0;
for(int i = 0; i < boxTypes.size(); ++i)
{
int num = min(truckSize, boxTypes[i][0]);//可以裝的箱子數量
cell += boxTypes[i][1]*num;
truckSize -= num;//更新卡車剩餘容量
}
return cell;
}
};
404 ms 48.5 MB C++
我的CSDN部落格地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!