第 i
个人的体重为 people[i]
,每艘船可以承载的最大重量为 limit
。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit
。
返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
示例 1:
输入:people = [1,2], limit = 3 输出:1 解释:1 艘船载 (1, 2)
示例 2:
输入:people = [3,2,2,1], limit = 3 输出:3 解释:3 艘船分别载 (1, 2), (2) 和 (3)
示例 3:
输入:people = [3,5,3,4], limit = 5 输出:4 解释:4 艘船分别载 (3), (3), (4), (5)
提示:
1 <= people.length <= 50000
1 <= people[i] <= limit <= 30000
Related Topics
题解
8月26每日一题
class Solution {
public int numRescueBoats(int[] people, int limit) {
Arrays.sort(people);
//limit 必然大于 people的最大值,不然就有人走不了
//所以从最重的人开始上船。每次尝试看看能否带上当前还没上船的最轻的人,如果不能则自己走,
// 等下一个稍微轻一点的人再来尝试带走这个轻一点的人
int count = 0;
int left = 0;
int right = people.length-1;
while (left < right){
if (people[right]+people[left] <= limit){
left++;
}
right--;
count++;
}
//最后只剩下一个人了
if (left==right){
count++;
}
return count;
}
}
直接用了Arrays.sort(people),本题应该重点还是是双指针,排序这块省去
发表评论