[左神面试]画匠问题:[贪心]

画匠问题

http://www.nowcoder.com/questionTerminal/767778ca5b38446cba801820df11399d

def solution(arr, num):  # 工作清单和工人数目 | O(N*logS), S=sum(arr)
    assert arr and len(arr) and num
    if len(arr) <= num:  # 如果工人过多,则是取最长的一个工作返回
        return max(arr)

    def get_need_num(limit):  # 每个画师只能工作不超过limit的时间,问需要几个画师才能完成
        res, worked = 1, 0  # 已用画师数目, 当前画师已工作时间
        for v in arr:
            if v > limit:  # 这一幅画哪怕单独分配给一个画师也完成不了
                return float('inf')
            worked += v
            if worked > limit:  # 如果尝试画当前的画已超工时
                res += 1  # 新增一个画师来画这幅画
                worked = v  # 新增画师的当前工时为v
        return res

    min_sum, max_sum = 0, sum(arr)  # 二分法确定每个画师的最大工作量
    while min_sum != max_sum - 1:
        mid = (min_sum + max_sum) // 2
        if get_need_num(mid) > num:
            min_sum = mid
        else:
            max_sum = mid
    return max_sum

n, num = map(int, input().split())
arrs = list(map(int, input().split()))
print(solution(arrs, num))
全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务