解题思路
这道题是要取单元数最大,所以我们只需要依次放入单元数最大的箱子,直到放满为止。
那么此时我们的难点就是如何得到单元数最大的箱子呢。
这里我用到了一个辅助的一维数组,用数组的下标来表示各个箱子的单元,用其存储的值来表示箱子的数量,那么存储完之后,我们只用从后往前遍历这个一维数组相加得最后的值即可。
class Solution {
public:
int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
int n=boxTypes.size();
int i,sum=0;
int box[1001]={0};
for(i=0;i<n;i++)
{
box[boxTypes[i][1]]+=boxTypes[i][0];
}
for(i=1000;i>0;i--)
{
if(truckSize==0)
break;
if(box[i]!=0)
{
if(box[i]<=truckSize)
{
sum+=box[i]*i;
truckSize-=box[i];
}
else
{
sum+=i*truckSize;
truckSize=0;
}
}
}
return sum;
}
};
这个方法时间复杂度较为乐观,但是由于用到了辅助数组,空间复杂度就相对来说差一些。其中这个二维数组的行数也规定在了1000以内,这个也是为什么这个一维辅助数组的大小定在了1001,所说这道题我的时间复杂度不是很高可能会和数据的大小有关,但是小编一遍就ac了,太高兴了,不接受反驳。