1891. Cutting Ribbons - cocoder39/coco39_LC GitHub Wiki
variant of binary search
O(len(ribbons) * log (max(ribbons)))
class Solution:
def maxLength(self, ribbons: List[int], k: int) -> int:
low, high = 1, max(ribbons)
while low + 1 < high:
mid = low + (high - low) // 2
can = self.canCut(ribbons, k, mid)
if can:
low = mid
else:
high = mid
if self.canCut(ribbons, k, high):
return high
if self.canCut(ribbons, k, low):
return low
return 0
def canCut(self, ribbons, k, length):
cnt = 0
for ribbon in ribbons:
cnt += ribbon // length
if cnt >= k:
return True
return False