183. Wood Cut

題目

https://www.lintcode.com/problem/wood-cut/description?_from=ladder&&fromId=2

實現

  1. 這裏的二分法的範圍是 1 ~ max(L)
  2. 然後看看以這個 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章