演算法 丟雞蛋問題

2021-10-10 19:49:33 字數 714 閱讀 8102

解題思路:

首先是狀態表示,利用乙個二維陣列,兩個維度分別表示雞蛋的數量和樓層數。

然後是狀態轉轉移,從低到高,雞蛋從少到多,遍歷每一種樓層和雞蛋數量的情況。在求每一種組合情況的時候,再從1遍歷樓層,求得對優解。

雞蛋丟在每一層的情況都是碎或者沒有碎。

先列舉雞蛋或者先列舉樓層都是可以的。

這裡的時間複雜度是n三次方的,在leetcode上會超時。

class

solution}}

return f[k]

[n];

}}

在上面的做法中,確定一種蛋樓數組合的時候,求最優值得時候就列舉所有的中間層,這是沒有必要的,因為最小值會存在一種單調性,如果檢測到小值的時候,不往下列舉了,直接返回。

同時,我們需要儲存前一次的最小值的位置,最小值出現的樓層是遞增的,我們只需要從上一次的最優值樓層開始比較,就能更快得取得這次樓層得最小值。

這樣時間複雜度是n方的。

這裡的兩次迴圈中,需要先列舉雞蛋,然後列舉樓層。二者順序不能交換。為什麼呢?因為我們每次儲存著當前蛋數的情況下,上一次最優樓層位置,再下次一增加樓層的時候,只需要從上一次最優樓層位置向下列舉就好,如果改變了樓層和蛋的迴圈次序,就亂套了。

class

solution

}return f[k]

[n];

}}

經典面試問題 丟雞蛋

扔雞蛋是一道經典的面試題,具體問題是給出 n n 2 個雞蛋,以及m層樓房 m n 要求計算最少需要多少次 平均需要多少次能得出雞蛋在第幾層正好摔碎。這道題根據雞蛋的個數以及其他要求,衍生出了很多變種,這裡將整理部分題型及其思路。一般來說,可以分為雞蛋 或玻璃球 有限制和無限制兩種情況,在無限制的情...

演算法 扔雞蛋問題

演算法第三次上機c題 問題描述 假設有兩個相同的玻璃球,你想確定100層樓中最低樓層,當它們從這層樓掉下來的時候會摔碎。假設球在這一層以下掉落時沒有損壞。什麼策略可以最大限度地減少試驗的跌落次數?假設我們只有乙個球。我們必須從每一層按順序從1降到100,最壞的情況下需要100次。現在想想我們有兩個球...

經典演算法 雞蛋掉落問題

剛好今天身體不太舒服,感冒難受的不行,也沒啥精力去學一些新的東西,就把老東西拾起來稍微拾掇一下,稍微複習一下好了。首先,我們來看一下經典演算法問題的描述 對應的leetcode的題目描述為 這個題目事實上我拿到的第一反應考慮能不能夠直接給出最優求解方案,結果就比較呵呵了,後來也是看了一些解答之後發現...