Medium
,Array
,Two Pointers
,Greedy
,Sorting
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:
people.length
<= 5 * 104people[i]
<= limit
<= 3 * 104
class Solution {
public:
int numRescueBoats(vector<int>& people, int limit) {
int ans = 0, l = 0, r = people.size() - 1;
sort(people.begin(), people.end());
while (l <= r) {
if (people[l] + people[r] <= limit) {
l++;
}
ans++;
r--;
}
return ans;
}
};
Yen-Chi ChenMon, Apr 3, 2023
class Solution:
def numRescueBoats(self, people: List[int], limit: int) -> int:
ans, l, r = 0, 0, len(people)-1
people.sort()
while l <= r:
if people[l] + people[r] <= limit:
l += 1
ans += 1
r -= 1
return ans
Yen-Chi ChenMon, Apr 3, 2023
function numRescueBoats(people, limit) {
people.sort((a, b) => b - a);
let boats = 0;
let right = people.length - 1;
for (let left = 0; left <= right; left++) {
if (people[left] + people[right] <= limit) {
boats++;
right--;
} else {
boats++;
}
}
return boats;
}
MarsgoatApr 12, 2023