875. Koko Eating Bananas
參考 1011. Capacity To Ship Packages Within D Days
class Solution:
def minEatingSpeed(self, piles: List[int], h: int) -> int:
def helper(speed): # 計算 koko 要花多少時間吃完
hours = 0
for pile in piles:
hours += (pile + speed - 1) // speed
return hours
left = 1
right = 1000000000 + 1
while left < right:
speed = left + (right - left) // 2
if helper(speed) <= h: # 當前 speed 足夠快可以在 h 時間內吃完
right = speed
else: # 當前 speed 不夠快可以在 h 時間內吃完
left = speed + 1
# while 終止時 left == right 此時回傳 left 或是 right 都是可以的
return right