881.Boats to Save People === ###### tags: `Medium`,`Array`,`Two Pointers`,`Greedy`,`Sorting` [881. Boats to Save People](https://leetcode.com/problems/boats-to-save-people/) ### 題目描述 You are given an array `people` where `people[i]` is the weight of the i^th^ 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 * 10^4^ * 1 <= `people[i]` <= `limit` <= 3 * 10^4^ ### 解答 #### C++ ```cpp= 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; } }; ``` > [name=Yen-Chi Chen][time=Mon, Apr 3, 2023] #### Python ```python= 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 ``` > [name=Yen-Chi Chen][time=Mon, Apr 3, 2023] #### Javascript ```javascript= 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; } ``` > [name=Marsgoat][time=Apr 12, 2023] ### Reference [回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)