All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1701_1800.s1710_maximum_units_on_a_truck.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
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