前言
题目描述
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为
limit。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
解题思路
如果最重的人和最轻的人可以共用一艘船,那么就这样安排,否则,最重的人无法与任何人配对,那么他们将自己独自乘坐一艘船。
(1)令people[i]指向当前最轻的人,而people[j]指向最重的那位。
(2)如果此时people[i]+people[j]<=limit,那么就给他们两个分配一艘船,否则的话,给最重的人自己分配一艘船
代码
int numRescueBoats(vector<int> &people,int limit){
sort(people.begin(),people.end());
int i=0,j=people.size()-1;
int ans=0;
while(i<j){
ans++;//先有一条船,待分配
if(people[i] +people[j] <= limit){
i++;
}
j--;
}
return ans;
}
完整代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution{
public:
int numRescueBoats(vector<int> &people,int limit){
sort(people.begin(),people.end());
int i=0;
int j=people.size()-1;
int ans=0;
while(i<=j){
ans++;//先有一条船,待分配
if(people[i] +people[j] <= limit){
i++;
}
j--;
}
return ans;
}
};
int main(){
int n;
cin>>n;
int data;
vector<int> people;
for(int i=0;i<n;i++){
cin>>data;
people.push_back(data);
}
int limit;
cin>>limit;
int res=Solution().numRescueBoats(people,limit);
cout<<res<<endl;
return 0;
}