您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页Wood Cut

Wood Cut

来源:爱玩科技网

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 

 

 

 

 

转载于:https://www.cnblogs.com/sherylwang/p/54959.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务