題目:
分析:假設不管毒藥和水混合,不管毒藥濃度為多少,小鼠喝過就會死。
現進行這樣的實驗(原理二分法):1000瓶水,先將前500的混合,讓乙隻小鼠喝。
如果死亡,則前500有毒藥,後500瓶直接排除;若不死亡,則後500瓶有毒藥。下次將進行250瓶的混合,並試毒選擇。
以此類推,二分結束的條件是begin = end 最後直接輸出begin即毒藥的標籤號。題目資料設定的也比較巧妙, 2^10 = 1024 > 1000,因此10只老鼠可以滿足試毒要求。
問題的時間複雜度o(log n), 空間複雜度o(1)。
解答:
#include
#include
using
namespace std;
intselectpoison
(vector<
bool
>
& bottle)
if(ispoison) end = middle;
else begin = middle +1;
}return begin;
}int
main()
使用並行二分法解決1000瓶酒找毒酒問題
從1000瓶酒中找出1瓶毒酒是一道著名的面試題,原題如下 某酒主人要宴請客人,他共有1000瓶酒,其中1瓶有毒。一旦喝了毒酒後,會在一天後發作,現在如果我們用小白鼠進行檢測,問一天內最少需要多少只小白鼠才可以檢測出哪瓶有毒?此題的常規思路是10只老鼠按從左到右的順序一字排好,每桶酒也編上號1到100...
三分解決問題
描述 我們都知道ycb老師是乙個陽剛的人,不僅如此,ycb老師還是乙個很很紳士的人,一天他看到乙個妹子被乙個箱子擋住了路,於是他想移動這個箱子,幫助妹子清理路障,但是要是用力過猛會的話,ycb老師怕妹子認為自己是乙個粗魯的人,於是他想知道最小移動箱子的力是多大?ps 忽略轉動 地面水平,箱子看成質點...
二分查詢問題
常見的二分查詢問題 1 給定排序陣列求乙個給定數在陣列中的下標,如果不存在就返回應該插入的位置 int searchinsert int a,int n,int target else return start 2 給定乙個 排序陣列,然後經過旋轉後,查詢給定值是否在陣列中。思路 1 先看左邊有序還...