1710. Maximum Units on a Truck

# 1710. Maximum Units on a Truck#

## 题目 #

You are assigned to put some amount of boxes onto one truck. You are given a 2D array `boxTypes`, where `boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi]`:

• `numberOfBoxesi` is the number of boxes of type `i`.
• `numberOfUnitsPerBoxi`is the number of units in each box of the type `i`.

You are also given an integer `truckSize`, which is the maximum number of boxes that can be put on the truck. You can choose any boxes to put on the truck as long as the number of boxes does not exceed `truckSize`.

Return the maximum total number of units that can be put on the truck.

Example 1:

``````Input: boxTypes = [[1,3],[2,2],[3,1]], truckSize = 4
Output: 8
Explanation: There are:
- 1 box of the first type that contains 3 units.
- 2 boxes of the second type that contain 2 units each.
- 3 boxes of the third type that contain 1 unit each.
You can take all the boxes of the first and second types, and one box of the third type.
The total number of units will be = (1 * 3) + (2 * 2) + (1 * 1) = 8.
``````

Example 2:

``````Input: boxTypes = [[5,10],[2,5],[4,7],[3,9]], truckSize = 10
Output: 91
``````

Constraints:

• `1 <= boxTypes.length <= 1000`
• `1 <= numberOfBoxesi, numberOfUnitsPerBoxi <= 1000`
• `1 <= truckSize <= 106`

## 题目大意 #

• numberOfBoxesi 是类型 i 的箱子的数量。-
• numberOfUnitsPerBoxi 是类型 i 每个箱子可以装载的单元数量。

## 解题思路 #

• 简单题。先将箱子按照单元数量从大到小排序。要想卡车装载单元数最大，那么需要尽量装单元数多的箱子。所以排序以后从单元数量多的箱子开始取。一直取至 truckSize 没有空间。累积的单元数即最大总数。

## 代码 #

``````package leetcode

import "sort"

func maximumUnits(boxTypes [][]int, truckSize int) int {
sort.Slice(boxTypes, func(i, j int) bool {
return boxTypes[i][1] > boxTypes[j][1]
})
res := 0
for i := 0; truckSize > 0 && i < len(boxTypes); i++ {
if truckSize >= boxTypes[i][0] {
truckSize -= boxTypes[i][0]
res += (boxTypes[i][1] * boxTypes[i][0])
} else {
res += (truckSize * boxTypes[i][1])
truckSize = 0
}
}
return res
}
``````

Apr 8, 2023