题目描述:
这个题目咋一看觉得挺难,实际上挺简单的。根据这个例子的模拟我们就很清楚的知道,这个题目的思路:先根据 boxTypes里的子元素,按照第二个元素(单元数)排序,也就是
std::sort(boxTypes.begin(),boxTypes.end(),[](vector<int>& a,vector<int>& b){return a[1]>b[1];});
然后,根据卡车的总数量truckSize来尽可能多的装载。这里面有一个难点就是当前可以装载的数量的确定: int nTake = std::min(nNum,truckSize); 然后truckSize的数量就依次减少,知道truckSize的数量小于等于0;跳出循环;
class Solution {
public:
int maximumUnits(vector<vector<int>>& boxTypes, int truckSize)
{
//首先对boxTypes中的子vector按照第二个元素(单元数)进行降序排序
std::sort(boxTypes.begin(),boxTypes.end(),[](const vector<int>& a,const vector<int>& b ){return a[1] > b[1];});
//遍历boxTypes
//累加和
int nRet =0;
for(const auto& box :boxTypes)
{
int nNum = box[0];
int nTakeCur = std::min(nNum,truckSize);
nRet += nTakeCur*box[1];
truckSize -= nTakeCur;
if(truckSize <= 0)
break;
}
return nRet;
}
};