题目出处:https://leetcode-cn.com/problems/boats-to-save-people/
思路:要使所需的船数最小,则每艘船上载的人必须尽可能多,即载两人的船数目需要尽可能多。
考虑体重最轻的人
若最轻的人不能与最重的人上同一条船,则最重的人与任何人都不能上同一条船,所以此时最重的人单独一人上一条船。
若最轻的人能与最重的人上同一条船,则要使船的数量少,则必须尽可能利用一艘船的空间,所以此时最轻的人与最重的人上同一条船是最优的选择。
class Solution {
public:
int numRescueBoats(vector<int>& people, int limit) {
sort(people.begin(), people.end());
int l = 0, r = people.size()-1;
int ans = 0;
while(l < r){
if(people[l] + people[r] <= limit){
++l;
--r;
++ans;
}
else{
--r;
++ans;
}
}
if(l == r){
++ans;
}
return ans;
}
};