算法入门(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 <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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容