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

g0801_0900.s0881_boats_to_save_people.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0801_0900.s0881_boats_to_save_people;

// #Medium #Array #Sorting #Greedy #Two_Pointers
// #2022_03_28_Time_20_ms_(61.11%)_Space_65.7_MB_(27.40%)

import java.util.Arrays;

/**
 * 881 - Boats to Save People\.
 *
 * Medium
 *
 * You are given an array `people` where `people[i]` is the weight of the ith person, and an **infinite number of boats** where each boat can carry a maximum weight of `limit`. Each boat carries at most two people at the same time, provided the sum of the weight of those people is at most `limit`.
 *
 * Return _the minimum number of boats to carry every given person_.
 *
 * **Example 1:**
 *
 * **Input:** people = [1,2], limit = 3
 *
 * **Output:** 1
 *
 * **Explanation:** 1 boat (1, 2)
 *
 * **Example 2:**
 *
 * **Input:** people = [3,2,2,1], limit = 3
 *
 * **Output:** 3
 *
 * **Explanation:** 3 boats (1, 2), (2) and (3)
 *
 * **Example 3:**
 *
 * **Input:** people = [3,5,3,4], limit = 5
 *
 * **Output:** 4
 *
 * **Explanation:** 4 boats (3), (3), (4), (5)
 *
 * **Constraints:**
 *
 * *   1 <= people.length <= 5 * 104
 * *   1 <= people[i] <= limit <= 3 * 104
**/
public class Solution {
    public int numRescueBoats(int[] people, int limit) {
        Arrays.sort(people);
        int i = 0;
        int j = people.length - 1;
        int boats = 0;
        while (i < j) {
            if (people[i] + people[j] <= limit) {
                boats++;
                i++;
                j--;
            } else if (people[i] + people[j] > limit) {
                boats++;
                j--;
            }
        }
        if (i == j) {
            return boats + 1;
        }
        return boats;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy