458. 可怜的小猪
生活随笔
收集整理的這篇文章主要介紹了
458. 可怜的小猪
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
458. 可憐的小豬
有 buckets 桶液體,其中 正好 有一桶含有毒藥,其余裝的都是水。它們從外觀看起來都一樣。為了弄清楚哪只水桶含有毒藥,你可以喂一些豬喝,通過觀察豬是否會死進行判斷。不幸的是,你只有?minutesToTest 分鐘時間來確定哪桶液體是有毒的。
喂豬的規則如下:
給你桶的數目 buckets ,minutesToDie 和 minutesToTest ,返回在規定時間內判斷哪個桶有毒所需的 最小 豬數。
提示:
- 1 <= buckets <= 1000
- 1 <=?minutesToDie <=?minutesToTest <= 100
解題思路
- 老鼠試毒藥的變種題目
1024瓶毒藥,10只老鼠,試出一瓶有毒的毒藥,方案:給每瓶藥從0-1023進行編號,老鼠從0-9進行編號,對于每一瓶藥,根據其編號二進制表示中1出現的位置,給對應位置的小白鼠喂藥,根據小白鼠的死亡結果,可以反推出毒藥的二進制表示。
共通點:小白鼠只有兩種狀態0代表存活,1代表死亡,而本題中可以進行minutesToTest / minutesToDie輪,假如minutesToTest / minutesToDie=2的話,那么可以進行兩輪,存在3種狀態
老鼠試藥的計算公式為 210=10242^{10}=1024210=1024
- 1024 為毒藥數量
- 2為老鼠可能的狀態數量
- 10 代表老鼠個數
因此這題 計算公式為statesres=bucketsstates^{res}=bucketsstatesres=buckets
- buckets 為毒藥數量
- states為小豬可能的狀態數量,公式為minutesToTest / minutesToDie + 1;
- res為需要的小豬數量,也是我們需要計算的最終結果
代碼
class Solution { public:int poorPigs(int buckets, int minutesToDie, int minutesToTest) {int states = minutesToTest / minutesToDie + 1;return ceil(log(buckets)/log(states));} };總結
以上是生活随笔為你收集整理的458. 可怜的小猪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到吵架闹离婚是啥情况
- 下一篇: 梦到我飞到了外太空是什么歌