LeetCode 881 救生艇(贪心)
Posted ambassdor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 881 救生艇(贪心)相关的知识,希望对你有一定的参考价值。
题目
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
思路
排序+双指针+贪心
每次尽量选取一个较小的和一个较大的组合共用一条船。
代码
class Solution {
public:
int numRescueBoats(vector<int>& people, int limit) {
sort(people.begin(),people.end());//排序,从小到大
int left=0,right=people.size()-1,sum=0;//双指针移动
while(left<=right){
if(people[left]+people[right]<=limit){//贪心,尽量满足limit
sum++;
right--;
left++;
}
else{//若超重,说明右指针处单独要一条船,则右指针左移
sum++;
right--;
}
}
return sum;
}
};
以上是关于LeetCode 881 救生艇(贪心)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 797. 所有可能的路径(dfs) / 881. 救生艇(双指针,贪心) / 295. 数据流的中位数(对顶堆)