题目
给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回 承载所有人所需的最小船数 。
- 来源:力扣(LeetCode)
- 链接:leetcode.cn/problems/bo…
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一
思路
- 排序
- 前后指针
代码
public int numRescueBoats(int[] people, int limit) {
Arrays.sort(people);
int i = 0;
int j = people.length - 1;
int count = 0;
while (i <= j) {
if (people[i] + people[j] <= limit) {
i++;
}
j--;
count++;
}
return count;
}
复杂度
- 时间复杂度:O(nlogn)
- 空间复杂度:O(logn) //排序需要额外的空间