作者:小迅
链接:https://leetcode.cn/problems/maximum-units-on-a-truck/solutions/1971242/tan-xin-zhu-shi-chao-ji-xiang-xi-by-xun-59r1i/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目![](https://i-blog.csdnimg.cn/blog_migrate/08f8b8f6076928859f7bb774e75f662b.png)
示例![](https://i-blog.csdnimg.cn/blog_migrate/b637ffacdf675d347ac8ce18d74a0230.png)
思路
给定整数 truckSize 表示卡车上可以装载 箱子 的 最大数量 。只要箱子数量不超过 truckSize ,你就可以选择任意箱子装到卡车上。
每次可以选择任意一个箱子装入卡车,卡车大小是有限的,所有每次选择箱子时,我们优先选择最大的箱子装入--局部最优,我们每次都选择最大箱子装入,当卡车装满时,就是我们最大的填装数量--全局最优,其实贪心就是我们日常思维,想到了很简单,想不到非常难
代码
//降序排序
int cmp(const void *a, const void *b)
{
int ** _a = (int *)a;
int ** _b = (int *)b;
return (*_b)[1] - (*_a)[1];
}
int maximumUnits(int** boxTypes, int boxTypesSize, int* boxTypesColSize, int truckSize){
//降序排序
qsort(boxTypes, boxTypesSize, sizeof(boxTypes[0]),cmp);
int max = 0;
for (int i = 0; i < boxTypesSize && truckSize > 0; ++i) {
if (truckSize >= boxTypes[i][0]) {//每次优先取最大值
max += boxTypes[i][1] * boxTypes[i][0];
} else {
max += truckSize * boxTypes[i][1];
}
truckSize -= boxTypes[i][0];
}
return max;
}
作者:小迅
链接:https://leetcode.cn/problems/maximum-units-on-a-truck/solutions/1971242/tan-xin-zhu-shi-chao-ji-xiang-xi-by-xun-59r1i/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。