''' 解题思路: 二分查找:左边界为数组最大值,右边界为数组元素的和,寻找船的最低运载能力 ''' class Solution: def shipWithinDays(self, weights: List[int], days: int) -> int: W = weights n = len(weights) #print(W) wMin = max(W) wMax = sum(W) # 最低运载能力为w时,是否可在days天内完成 def isOK(w): t = 0 day = 0 for i in range(n): t += W[i] if t>w: day += 1 t = W[i] day += 1 #print('day=',day) if day<=days: return True else: return False resMin = isOK(wMin) if resMin: return wMin resMax = True while wMin<wMax-1: wMid = (wMin+wMax)//2 resMid = isOK(wMid) if resMid: resMax = resMid wMax = wMid else: resMin = resMid wMin = wMid #print('wMax=',wMax) return wMax t = Solution().shipWithinDays([1,2,3,4,5,6,7,8,9,10], 5) # 15 #t = Solution().shipWithinDays([3,2,2,4,1,4], 3) # 6 #t = Solution().shipWithinDays([1,2,3,1,1], 4) # 3 print(t)