算法入門(4)奶牛二分

瘋牛問題的二分貪心算法:
加入二分查找速度快了不少。
這里把r的最大值設(shè)置為: int((N[-1] - N[0])/(C-1)) 也就是 最大房間與最小房間的差除以需要放的牛數(shù)量減一。因?yàn)榈匾活^牛確定放在第一個(gè)位置了。

# 貪心部分
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)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容