LintCode 183 [Wood Cut]

原题

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

有3根木头[232, 124, 456], k=7, 最大长度为114.

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

解题思路

  • 思路:Binary Search
  • 问题又可以转化成在1和给的所有原木中最长的长度中间找一个合适的长度,使得把每段原木按此分段后得到的小段木头数目至少为k
  • 扩展,除法转化为二分法,求100除以5,相当于在0到100之间找一个数使得x*5小于等于100,(x+1)*5大于100

完整代码

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 sum(L) < k:
            return 0
            
        start, end = 1, max(L)
        while start + 1 < end:
            mid = start + (end - start) / 2
            pieces = sum([l / mid for l in L])
            if pieces >= k:
                start = mid
            else:
                end = mid
                
        if sum([l / end for l in L]) > k:
            return end
        return start
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【题目描述】 Given n pieces of wood with lengthL[i](integer arr...
    程风破浪会有时阅读 798评论 0 0
  • 描述 有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到...
    6默默Welsh阅读 611评论 0 0
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 2,456评论 0 1
  • 前言 其实读完斯坦福的这本《互联网大规模数据挖掘》,让我感觉到,什么是人工智能?人工智能就是更高层次的数据挖掘。机...
    我偏笑_NSNirvana阅读 12,756评论 1 23
  • 我的理想是自己做服装,自己拍照,自己做期刊,把事业经营得好好的。
    木子阅读 230评论 0 1