传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。
传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量(weights)的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。
返回能在 days 天内将传送带上的所有包裹送达的船的最低运载能力。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.Arrays;
class Solution {
private boolean ok(int[] weights, int days, int limit) {
int num = 1;
int sum = 0;
for (int i = 0; i < weights.length; ++i) {
sum += weights[i];
if (sum > limit) {
sum = weights[i];
num++;
if (num > days) {
return false;
}
}
}
return true;
}
public int shipWithinDays(int[] weights, int days) {
int left = Arrays.stream(weights).max().getAsInt(), right = Arrays.stream(weights).sum();
int ans = right;
while (left <= right) {
int mid = (left + right) >> 1;
if (ok(weights, days, mid)) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
}