1. 程式人生 > 其它 >LeetCode 5641. 卡車上的最大單元數(排序,模擬)

LeetCode 5641. 卡車上的最大單元數(排序,模擬)

技術標籤: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阿明),一起加油、一起學習進步!
Michael阿明