g1701_1800.s1710_maximum_units_on_a_truck.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g1701_1800.s1710_maximum_units_on_a_truck;
// #Easy #Array #Sorting #Greedy #2022_04_24_Time_9_ms_(78.69%)_Space_42.8_MB_(78.53%)
import java.util.Arrays;
/**
* 1710 - Maximum Units on a Truck\.
*
* Easy
*
* 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
**/
public class Solution {
public int maximumUnits(int[][] boxTypes, int truckSize) {
Arrays.sort(boxTypes, (b1, b2) -> Integer.compare(b2[1], b1[1]));
int maxUnits = 0;
int i = 0;
while (truckSize > 0 && i < boxTypes.length) {
if (boxTypes[i][0] <= truckSize) {
maxUnits += boxTypes[i][0] * boxTypes[i][1];
truckSize -= boxTypes[i][0];
} else {
maxUnits += Math.min(truckSize, boxTypes[i][0]) * boxTypes[i][1];
truckSize -= Math.min(truckSize, boxTypes[i][0]);
}
i++;
}
return maxUnits;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy