###### tags: `LeetCode` `Medium` `Binary Search` # LeetCode #1011 [Capacity To Ship Packages Within D Days](https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/) ### (Medium) 傳送帶上的包裹必須在 D 天內從一個港口運送到另一個港口。 傳送帶上的第 i 個包裹的重量為 weights[i]。每一天,我們都會按給出重量的順序往傳送帶上裝載包裹。我們裝載的重量不會超過船的最大運載重量。 返回能在 D 天內將傳送帶上的所有包裹送達的船的最低運載能力。 --- 左值為所有包裹中最重的重量(如果小於該重量則無論如何都沒有辦法運送該包裹), 右值則設為全部包裹重量總和。 每次判斷以中值作為船的運載重量, 當下一包裹的重量大於剩餘可運送的運載重量時, 則須將運送時間增加一天, 並將運載重量歸零, 再加上該包裹的重量。 若運送時間大於規定時間, 則代表單次運載量過低, 此時將左值改為中值+1, 反之則將右值改為中值。 --- ``` class Solution { public: int shipWithinDays(vector<int>& weights, int days) { int l=0, r=0; for(int w:weights){ l=max(l, w); r+=w; } while(l<r){ int m=l+(r-l)/2, d=1, cur=0; for(int w:weights){ if(cur+w>m){ d++; cur=0; } cur+=w; } if(d>days)l=m+1; else r=m; } return l; } }; ```