- 兩種思路:
- 第一種:動態規劃,轉化公式
下面是偶的思路。這是乙個很典型的動態規劃問題。用確定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層開始扔每次可以扔的最矮樓層如下
1616 + 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層樓問題
最樸素的做法是從100層一直扔到 層,不過這樣明顯不是最優的。這題目其實可以轉化為dp求解,假設有 層,你隨機選了一層 如果雞蛋碎了,那麼你只剩乙個雞蛋了,為了確保能夠找到臨界高度,你不得不從第一層往上一層一層扔剩下的乙個雞蛋。如果沒碎呢,你還剩 個雞蛋,但你已經用了一次測試機會。這時候的次數應該為...
100層樓摔雞蛋問題
reference 題目 有一棟100層高樓,從某一層開始扔下的玻璃杯剛好摔壞,現有兩個玻璃杯,最少幾次能找到那一層?首先我要對題目的表述提點意見。這是乙個很有歧義的表述方式,容易誤導人向概率的方向去思考。比如說,我可以回答 最少一次能找到那一層 我就拿個杯子,從一樓起一層一層的摔。從概率上講,有可...
100層樓扔兩個雞蛋問題
解釋 兩個雞蛋一樣,只有在達到某個樓層高度時,才會摔碎。可以假設這個摔碎臨界樓層是n。可見,用二分法結果很不穩定,特別是n小於50時最糟糕 甚至會比第一種直接遍歷的還要多一次 n越大越好找,需要嘗試的次數越少。如果這個題目換成雞蛋個數不限制,那就是用二分法最快了。當最高樓層為100時,可列出不等式 ...