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 <= 10001 <= numberOfBoxesi, numberOfUnitsPerBoxi <= 10001 <= truckSize <= 106Problem Overview: You are given different box types where each type contains a number of boxes and a number of units per box. A truck can carry at most truckSize boxes. The goal is to load boxes so the total units on the truck is maximized.
Approach 1: Greedy Approach using Sorting (Time: O(n log n), Space: O(1) or O(n) depending on sorting implementation)
This problem fits the greedy pattern. Each box type has a "value" (units per box). To maximize total units, always load boxes that give the highest units first. Start by sorting the box types in descending order by unitsPerBox using a sorting algorithm. Then iterate through the sorted list and take as many boxes as possible from each type until the truck reaches its capacity.
For each box type, compute boxesTaken = min(numberOfBoxes, remainingTruckCapacity). Multiply that by unitsPerBox and add it to the total. Decrease the remaining capacity and continue. The key insight is that a locally optimal choice (highest units per box first) leads to the global optimum because each box contributes independently to the final total.
This approach is simple and reliable. Sorting dominates the runtime with O(n log n), where n is the number of box types. The rest of the algorithm is a single pass over the array. Space complexity is O(1) if the sort is in-place. The input structure is just an array of box types.
Approach 2: Counting Sort Based Approach (Time: O(n + k), Space: O(k))
The constraints allow an optimization using counting sort. Instead of sorting box types directly, group them by unitsPerBox. Since the maximum units per box is bounded (commonly ≤1000 in the problem constraints), create a frequency structure where each index represents a specific units value.
Iterate through the input and accumulate how many boxes exist for each unitsPerBox value. Then traverse this structure from the highest unit value down to the lowest. At each step, greedily load as many boxes as possible until the truck is full.
This avoids the O(n log n) sorting step. Building the counts takes O(n), and scanning the bucket array takes O(k), where k is the maximum possible units per box. The approach uses O(k) additional space but improves runtime when n is large and the unit range is small.
Recommended for interviews: The greedy sorting solution is what most interviewers expect first. It clearly demonstrates recognition of the greedy pattern and is easy to implement under time pressure. The counting sort optimization shows deeper understanding of constraints and can improve performance when the unit range is limited.
This approach involves sorting the box types by the number of units per box in descending order. Once sorted, the boxes are loaded onto the truck with the highest units per box first, maximizing the number of units on the truck until it reaches its capacity.
This solution sorts the boxTypes array based on the units per box in descending order. Then, it iterates through the sorted array, adding as many boxes as possible from each type to the truck until the truck's capacity is reached. The function returns the total units accumulated.
Time Complexity: O(n log n) due to sorting.
Space Complexity: O(1) extra space, as we sort in place.
Instead of sorting by each unit's count, employ counting sort principles to store the total units in an array where the index represents the units per box. This could potentially be faster for large inputs with many boxes and limited unit types.
This approach uses a counting array where the index represents units per box to aggregate total boxes available. The truck is filled according to the highest units available in the count array.
Time Complexity: O(n + M) where M = 1000 is a constant.
Space Complexity: O(M) for the counting array.
According to the problem, we should choose as many units as possible. Therefore, we first sort boxTypes in descending order of the number of units.
Then we traverse boxTypes from front to back, choose up to truckSize boxes, and accumulate the number of units.
The time complexity is O(n times log n), where n is the length of the two-dimensional array boxTypes.
We can also use the idea of counting sort, create an array cnt of length 1001, where cnt[b] represents the number of boxes with b units.
Then starting from the box with the maximum number of units, choose up to truckSize boxes, and accumulate the number of units.
The time complexity is O(M), where M is the maximum number of units. In this problem, M=1000.
Python
Java
C++
Go
TypeScript
| Approach | Complexity |
|---|---|
| Greedy Approach using Sorting | Time Complexity: O(n log n) due to sorting. |
| Counting Sort Based Approach | Time Complexity: O(n + M) where M = 1000 is a constant. |
| Greedy + Sorting | — |
| Counting Sort | — |
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Greedy with Sorting | O(n log n) | O(1) to O(n) | General solution. Simple and commonly expected in interviews. |
| Counting Sort Optimization | O(n + k) | O(k) | When units per box have a small bounded range and you want linear time. |
Leetcode 1710. Maximum Units on a Truck || Code + Explanation + Example || June Daily Challenge • Code with Alisha • 6,897 views views
Watch 9 more video solutions →Practice Maximum Units on a Truck with our built-in code editor and test cases.
Practice on FleetCode