本文主要是介绍881救生艇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给定数组 people
。people[i]
表示第 i
个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit
。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit
。
返回 承载所有人所需的最小船数 。
分析:
贪心策略:先将people数组从小到大排序,考虑第一个人,如果他和最后一个人不能乘坐同一条船,那么最后一个人只能单独分配一条船。再考虑倒数第二个人,如果他能够和第一个人乘坐同一条船,那么给这两人分配同一条船,并且再考虑第二个人和倒数第三个人。到此,已经明确了,利用双指针即可解决。
class Solution {public int numRescueBoats(int[] people, int limit) {Arrays.sort(people);int cnt = 0;int l = 0,r = people.length-1;while(l<=r){if(people[l]+people[r]>limit){cnt++;r--;}else{l++;r--;cnt++;}}return cnt;}
}
这篇关于881救生艇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!