美文网首页
算法入门(4)奶牛二分

算法入门(4)奶牛二分

作者: 梦san国 | 来源:发表于2019-12-18 17:24 被阅读0次

疯牛问题的二分贪心算法:
加入二分查找速度快了不少。
这里把r的最大值设置为: int((N[-1] - N[0])/(C-1)) 也就是 最大房间与最小房间的差除以需要放的牛数量减一。因为地一头牛确定放在第一个位置了。

# 贪心部分
def judge(N,C,d):
    num = 1
    location = N[0]
    for i in range(1,len(N)):
        if N[i]-location>=d:
            num+=1
            location = N[i]
            if num == C:
                # print("牛放完了")
                return True
    return False
    
   # 二分部分
def farmer_cattle2(N,C):
    N.sort()
    # d = int((N[-1] - N[0])/C)
    l = 1
    r = int((N[-1] - N[0])/(C-1))
    print(l,r)
    max = 0
    while l<=r:

        distance = int((l+r)/2)
        # TRUE 表示 牛在右边
        if judge(N,C,distance):
            l = int(distance)+1
            if max <distance:
                max = distance
         # 表示牛在左边
        else:
            r = int(distance)-1
    print(max)
if __name__ == "__main__":
    n_l = [1,2,8,4,9]
    cattle_list = [1,5,8]
    c = 3
    farmer_cattle2(cattle_list, c)

相关文章

网友评论

      本文标题:算法入门(4)奶牛二分

      本文链接:https://www.haomeiwen.com/subject/akbunctx.html