Leetcode - 458 Poor Pigs


題目:

總共有1000個罐子,其中有且只有1個是毒葯,另外其他的都是水. 現在用一群可憐的豬去找到那個毒葯罐. 已知毒葯讓豬毒發的時間是15分鍾, 那么在60分鍾之內,最少需要幾頭豬來找出那個毒葯罐?

分析:

為什么可憐不言而喻...本題可以這么考慮問題, 先是二維地排列罐子, 然后分別讓兩頭豬去嘗試找出哪一行和哪一列有毒.間隔時間為15分鍾, 由於測試時間是60分鍾 所以總共1只豬能測試5行或者5列. (這里不是4行或者4列, 因為如果前面4個測試豬都沒死的話, 說明最后一行/最后一列肯定有毒). 總結一下,1個維度交給1只豬, 它鞠躬盡瘁死而后已, 能幫我們檢查出(測試時間/毒發時間 + 1)個維度單位.

那么回到二維的例子里面, 2只豬能幫我們檢查5*5=25個罐子,那么如果是三維, 就是5^3 = 125個, 以此類推隨着維度的上升,只要最后的水桶數大於我們需要檢查的水桶數,就需要幾頭豬.

1   2   3   4   5

6   7   8   9  10

11 12 13 14 15

16 17 18 19 20

21 22 23 24 25

代碼:(相對簡單)

public class solution{

  public int poorPigs(int buckets, int timeToDie, int timeToTest) {

    int pigs = 0;

    while (Math.pow((timeToTest / timeToDie + 1), pigs) < buckets) {

      pig++;

    }

    return pigs;

  }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM