leetcode1014

 1 class Solution:
 2     def shipWithinDays(self, weights: 'List[int]', D: int) -> int:
 3         left = max(weights)#不能小于最重的单个货物
 4         right = sum(weights)#不用大于全部货物的总重量
 5         while left < right:#以此为左和右边界,向中间查询
 6             cur = 0 #当前批次装载重量
 7             need = 1 #所需时间
 8             mid = (left + right) // 2
 9             for w in weights:
10                 if cur + w > mid:#超过中间位置的重量
11                     need += 1#所需天数+1
12                     cur = 0#当前批次结束
13                 cur += w
14             if need > D:#按当前mid位置作为运载量,时间超过预期要求D,则需要提高运载量,left增大
15                 left = mid + 1
16             else: #当前mid位置作为运载量,可以在规定时间D内完成全部货物的运输,则尝试减小运载量,right减小
17                 right = mid
18         #循环退出时left==right,是最佳运载量
19         return left

猜你喜欢

转载自www.cnblogs.com/asenyang/p/10547056.html