## Description

https://leetcode.com/problems/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`

is the number of units in each box of the type_{i}`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}

## Explanation

Sort boxTypes by their unit number in descending order. Then load the boxTypes with the higher unit number first.

## Python Solution

```
class Solution:
def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
boxTypes = sorted(boxTypes, key=lambda b:-b[1])
result = 0
box_count = 0
is_full = False
for box_type in boxTypes:
if is_full:
break
for i in range(box_type[0]):
if is_full:
break
else:
result += box_type[1]
box_count += 1
if box_count == truckSize:
is_full = True
return result
```

- Time Complexity: O(Nlog(N)).
- Space Complexity: O(N).