## 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] = [numberOfBoxes`

:_{i}, numberOfUnitsPerBox_{i}]

`numberOfBoxes`

is the number of boxes of type_{i}`i`

.`numberOfUnitsPerBox`

_{i}_{ }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 = 4Output:8Explanation: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 = 10Output:91

**Constraints:**

`1 <= boxTypes.length <= 1000`

`1 <= numberOfBoxes`

_{i}, numberOfUnitsPerBox_{i}<= 1000`1 <= truckSize <= 10`

^{6}

## Rust Solution

```
struct Solution;
impl Solution {
fn maximum_units(box_types: Vec<Vec<i32>>, truck_size: i32) -> i32 {
let mut boxes: Vec<(i32, i32)> = box_types.into_iter().map(|v| (v[1], v[0])).collect();
boxes.sort_unstable();
let mut size = 0;
let mut res = 0;
while let Some((unit, k)) = boxes.pop() {
if size + k < truck_size {
res += unit * k;
size += k;
} else {
let left = truck_size - size;
res += left * unit;
break;
}
}
res
}
}
#[test]
fn test() {
let box_types = vec_vec_i32![[1, 3], [2, 2], [3, 1]];
let truck_size = 4;
let res = 8;
assert_eq!(Solution::maximum_units(box_types, truck_size), res);
let box_types = vec_vec_i32![[5, 10], [2, 5], [4, 7], [3, 9]];
let truck_size = 10;
let res = 91;
assert_eq!(Solution::maximum_units(box_types, truck_size), res);
}
```

Having problems with this solution? Click here to submit an issue on github.