LeetCode#222周赛,遗憾只会1道

test1 #5641. 卡车上的最大单元数
关键字
  • 1按照特定位置进行二维vector的排序
  • 2 贪心算法

请你将一些箱子装在 一辆卡车 上。给你一个二维数组 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

类似pat里的贪心算法(题号有空找一下)


```cpp
class Solution {
     
public:
    static bool compare(vector<int>&a,vector<int>&b){
     
        return a[0]>b[0];
    }
    int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
     
        int ans = 0;
        int row = boxTypes.size();
        int lie = boxTypes[0].size();
        for(int i = 0; i < row;i++){
     
            swap(boxTypes[i][1],boxTypes[i][0]);
        }
        sort(boxTypes.begin(), boxTypes.end(), compare);
        int t = 0;
        while( t < row){
     
            int t2 = 0;
            while(truckSize > 0 && t < row && t2 < boxTypes[t][1]){
     
                ans += boxTypes[t][0];
                t2++; 
                truckSize--;
            }
            t++;
           
        }
        
        return ans;
    }
};

你可能感兴趣的:(LeetCode刷题,leetcode,c++)