思路:先把一个个包裹拆下来,然后进行排序,最后取出符合数量且在所拥有的数目内的最大包裹
class Solution {
public:
int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
if(boxTypes.empty())
return 0;
vector<int> vec;
for(auto v:boxTypes)
{
for(int i=0;i<v[0];++i)
vec.push_back(v[1]);
}
sort(vec.begin(),vec.end());
int result=0;
for(int i=vec.size()-1;i>=0&&truckSize;--i,--truckSize)//有可能最大数量会大于总数
result+=vec[i];
return result;
}
};
看了一下别人的解题,重新利用仿函数写了一遍
class compare//制定规则,按照第二个数从大到小排列
{
public:
bool operator()(const vector<int>& a,const vector<int>& b)
{
return a[1] > b[1];
}
};
class Solution {
public:
int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
sort(boxTypes.begin(),boxTypes.end(),compare());
int result=0;
for(auto i:boxTypes)
{
if(truckSize<=i[0])
{
result+=(i[1]*truckSize);
return result;
}
result+=(i[1]*i[0]);
truckSize-=i[0];
}
return result;
}
};