算法入门(4)奶牛二分

疯牛问题的二分贪心算法:
加入二分查找速度快了不少。
这里把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 

你可能感兴趣的:(算法入门(4)奶牛二分)