自己做的旅游网站 介绍,免费的网站推广在线推广,创建个人主页网站,北京到广州说明#xff1a;题解完全是从leetCode上拉下来的#xff0c;在这里只是作为一个备份#xff0c;怕之后找不着了。同时也分享给大家#xff0c;这个题目用了一个我之前从未遇到的思路。 原题#xff1a;船的最小载重量-leetCode1101 题目#xff08;看懂题目了吗#xff… 说明题解完全是从leetCode上拉下来的在这里只是作为一个备份怕之后找不着了。同时也分享给大家这个题目用了一个我之前从未遇到的思路。 原题船的最小载重量-leetCode1101 题目看懂题目了吗我看了好几遍
传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。
传送带上的第 i 个包裹的重量为 weights[i]。每一天我们都会按给出重量weights的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。
返回能在 days 天内将传送带上的所有包裹送达的船的最低运载能力。
示例 1 输入weights [1,2,3,4,5,6,7,8,9,10], days 5 输出15 解释 船舶最低载重 15 就能够在 5 天内送达所有包裹 如下所示 第 1 天1, 2, 3, 4, 5 第 2 天6, 7 第 3 天8 第 4 天9 第 5 天10 请注意货物必须按照给定的顺序装运因此使用载重能力为 14 的船舶并将包装分成 (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) 是不允许的。 示例 2 输入weights [3,2,2,4,1,4], days 3 输出6 解释 船舶最低载重 6 就能够在 3 天内送达所有包裹 如下所示 第 1 天3, 2 第 2 天2, 4 第 3 天1, 4 示例 3 输入weights [1,2,3,1,1], days 4 输出3 解释 第 1 天1 第 2 天2 第 3 天3 第 4 天1, 1 题解 class Solution {public int shipWithinDays(int[] weights, int days) {// 确定二分查找左右边界int left Arrays.stream(weights).max().getAsInt(), right Arrays.stream(weights).sum();while (left right) {int mid (left right) / 2;// need 为需要运送的天数// cur 为当前这一天已经运送的包裹重量之和int need 1, cur 0;for (int weight : weights) {if (cur weight mid) {need;cur 0;}cur weight;}if (need days) {right mid;} else {left mid 1;}}return left;}
}