面試題目:2個雞蛋100層樓問題
阿新 • • 發佈:2018-08-12
clas family 如果 規劃 數字 span time 試題 一次
- 題目:
- 兩個軟硬程度一樣但未知的雞蛋,它們有可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。有座100層的建築,要你用這兩個雞蛋確定哪一層是雞蛋可以安全落下的最高位置。可以摔碎兩個雞蛋。
- 兩種思路:
- 第一種:動態規劃,轉化公式
下面是偶的思路。 這是一個很典型的動態規劃問題。用確定minNum[n]表示雞蛋從高n層的樓摔下不碎需要的最小次數。則有 轉移方程: minNum[n ] = min(1 + max(i – 1, minNum[n-1])) for 1<=i <= n 邊界條件: minNum[0] = 0; minNum[1] = 1 假設i是第一次扔雞蛋的樓層,如果破了,則為了確定下面樓層中的安全位置,需要從第一層挨著試,需要i-1次,不碎的話上面還有n-i層,還剩兩個雞蛋,需要minNum[n-i]次。
- 第二種:分析法,寫出公式
拿具體的數字作例子,假設100層樓扔16次可以搞定,那麽第一次可以且最矮必須從16層扔。碎了好說,從第一層開始試,不碎的話還有15次機會,同理最矮可以從31層開始扔 每次可以扔的最矮樓層如下 16 16 + 15 = 31 31 + 14 = 45 45 + 13 = 58 58 + 12 = 70 70 + 11 = 81 81+ 10 = 91 91 + 9 = 100 超額完成目標。假設需要扔n次,則有:(此n也表示安全下落的層) n + (n-1) + (n-2) + … + 1 >= 100 n (n +1) >= 200 min(n) = 14
面試題目:2個雞蛋100層樓問題