码迷,mamicode.com
首页 > 其他好文 > 详细

Wood Cut

时间:2016-05-15 22:51:17      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

http://www.lintcode.com/zh-cn/problem/wood-cut/

有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。

 注意事项

木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是整数。无法切出要求至少 k 段的,则返回 0 即可。

 

Lintcode上面的一道题目,很有意思,光看题可能想象不出是用二分来做。但是实际小段的长度可以使用二分来确定。left为0,right为原始木头的最长长度(注意不是最小长度)。但是这道题二分的复杂度也不是O(logn)而是和木头的数目也成正比关系(每次对于划分的长度,需要计算一遍所有的木头得到可以锯出的小段数目)。具体代码如下:

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 not L:
            return 0

        l = 0
        r = max(L)
        
        while l+1 < r:
           mid = l + (r-l)/2
           if  sum([i/mid  for i in L]) >= k:
               l = mid 
           else:
               r = mid
        if sum([i/r for i in L]) < k:
            return l 
        else:
            return r 

 

 

 

 

Wood Cut

标签:

原文地址:http://www.cnblogs.com/sherylwang/p/5496459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!