救生艇
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。
每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回载到每一个人所需的最小船数。(保证每个人都能被船载)。
import java.util.Arrays;
class Solution {
private int search(int[] people, int key) {
int l = 0, r = people.length - 1, ans = -1;
while (l <= r) {
int mid = (l + r) >> 1;
if (people[mid] <= key) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
public int numRescueBoats(int[] people, int limit) {
Arrays.sort(people);
int mid = search(people, limit >> 1);
int leftUnused = 0;
int left = mid, right = mid + 1, ret = 0;
while (left >= 0 && right < people.length) {
if (people[left] + people[right] <= limit) {
ret++;
left--;
right++;
} else {
leftUnused++;
left--;
}
}
return ret + (left + leftUnused + 2) / 2 + (people.length - right);
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号