題目
https://www.lintcode.com/problem/wood-cut/description?_from=ladder&&fromId=2
實現
- 這裏的二分法的範圍是 1 ~ max(L)
- 然後看看以這個 wood length 爲前提的基礎上,能切割出多少木頭,如果少於 k 根,說明要短一些才行,如果多餘 k,說明可以繼續邊長一些
代碼
class Solution:
"""
@param L: Given n pieces of wood with length L[i]
@param k: An integer
@return: The maximum length of the small pieces
"""
def woodCut(self, L, k):
if L is None or len(L) == 0:
return 0
left, right = 1, max(L)
while left + 1 < right:
mid = left + (right - left) // 2
if self.get_pieces(L, mid) >= k:
left = mid
else:
right = mid
if self.get_pieces(L, right) >= k:
return right
if self.get_pieces(L, left) >= k:
return left
return 0
def get_pieces(self, L, length):
count = 0
for i in range(len(L)):
count += L[i] // length
return count