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