怎么做可以访问网站,成都网站的建设,南京的网站建设公司,代理网点传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。
传送带上的第 i 个包裹的重量为 weights[i]。每一天#xff0c;我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。
返回能在 D 天内将传送带上的所有包裹送达的船的最低运载…传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。
传送带上的第 i 个包裹的重量为 weights[i]。每一天我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。
返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。 示例 1
输入weights [1,2,3,4,5,6,7,8,9,10], D 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], D 3 输出6 解释 船舶最低载重 6 就能够在 3 天内送达所有包裹如下所示
第 1 天3, 2第 2 天2, 4第 3 天1, 4
示例 3
输入weights [1,2,3,1,1], D 4 输出3 解释
第 1 天1第 2 天2第 3 天3第 4 天1, 1
提示
1 D weights.length 50000
1 weights[i] 500
解题思路
二分法搜索船的容量起始搜索区间为[最大的包裹重量全部包裹的总和]
因为最小的运输量必须能运一个包裹而最大的运输量就是一次全部运完
通过计算当前运输量下需要的运输天数来收缩边界
代码
func shipWithinDays(weights []int, D int) int {sum , max:0,-1for _, weight : range weights {sumweightif weightmax{maxweight}}l,r:max,sumfor lr {mid :(r-l)/2ldays : countDays(mid, weights)if daysD{rmid-1}else{lmid1}}return l
}
func countDays(ship int,weights []int) int{cur,days:ship,1for _, weight : range weights {if curweight{cur-weight}else {curship-weightdays}}return days
}