本文共 2049 字,大约阅读时间需要 6 分钟。
关注我,学习常用算法与数据结构,一题多解,降维打击。[1709]
请你将一些箱子装在 一辆卡车 上。给你一个二维数组 boxTypes ,其中 boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi] :
numberOfBoxesi 是类型 i 的箱子的数量。
numberOfUnitsPerBoxi 是类型 i 每个箱子可以装载的单元数量。 整数 truckSize 表示卡车上可以装载 箱子 的 最大数量 。只要箱子数量不超过 truckSize ,你就可以选择任意箱子装到卡车上。返回卡车可以装载 单元 的 最大 总数。
示例 1:
输入:boxTypes = [[1,3],[2,2],[3,1]], truckSize = 4
输出:8 解释:箱子的情况如下:输入:boxTypes = [[5,10],[2,5],[4,7],[3,9]], truckSize = 10
输出:91提示:
1 <= boxTypes.length <= 1000
1 <= numberOfBoxesi, numberOfUnitsPerBoxi <= 1000 1 <= truckSize <= 10^6此题使用贪心算法,单元个数越大的先装,注意总和是否超出int32。
在箱子个数一定的情况下,单元数越大的箱子先装,使得最后总单元数最大。
bool Cmp(vector a, vector b) { }class Solution { public: int maximumUnits(vector>& boxTypes, int truckSize) { sort(boxTypes.begin(), boxTypes.end(), Cmp); // 按照单元数从大到小排序 int sum = 0, j=truckSize; for (int i = 0; i < boxTypes.size() && j>0; ++i) { // 尽量装多的箱子进去 } return sum; }};
bool Cmp(vector a, vector b) { return a[1]> b[1];}class Solution { public: int maximumUnits(vector>& boxTypes, int truckSize) { sort(boxTypes.begin(), boxTypes.end(), Cmp); // 按单元数从大到小排序 int sum = 0, j=truckSize; for (int i = 0; i < boxTypes.size() && j>0; ++i) { if (boxTypes[i][0]<=j) { // 如果剩下卡车容量可以装下当前规格的箱子。就全装入 sum += boxTypes[i][0]*boxTypes[i][1]; j-=boxTypes[i][0]; } else { // 否则就只装目前卡车容量的个数。 sum += j*boxTypes[i][1]; j=0; } } return sum; }};
本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。
转载地址:http://dowrz.baihongyu.com/