# 1011. Capacity To Ship Packages Within D Days
#### Difficulty: Medium
link: https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/
### 1. Binary Search
#### $O(n\ log\ m)$ runtime, $O(1)$ space
###### n = len(weights), m = sum(weights)
找一個最小值來滿足題目要求,不想一個個慢慢嘗試,就用效率較高的Binary search。
搜尋範圍的下界是max(weights),確保船一定裝得下每一個貨品;上界是sum(weights),一天能裝完所有貨品的情況。
shipping_days函數計算,在給定船的capacity的情況,總共需要多少天來運送。Binary Search會找出滿足題目要求(i.e. 天數<=days)的最小capacity。
##### python
```python=
class Solution:
def shipWithinDays(self, weights: List[int], days: int) -> int:
def shipping_days(capacity):
count, total = 0, 0
for w in weights:
if total + w > capacity:
total = 0
count += 1
total += w
return count + 1
left, right = max(weights), sum(weights)
while left < right:
mid = left + (right - left) // 2
if shipping_days(mid) <= days:
right = mid
else:
left = mid + 1
return left
```
###### tags: `leetcode`