[size=large]問題:[/size]
* 等於或高於它的樓層,扔下玻璃珠,玻璃珠一定會碎。玻璃珠碎了就不能再扔。現在讓你設計一種方式,使得在該方式下,最壞的情況扔的次數比其他任何方式最壞的次數都少。也就是設計一種最有效的方式來確定臨界樓層
[size=large]解決方法[/size]
使用者隨機選一層i,扔下去,有兩個結果:
碎掉,或者沒有碎掉。
1.如果碎掉,去試驗前i-1層,那麼最多需要i-1次再加上碎掉的那一次,最多就是i次。
2.如果沒有碎掉,等於說從第i+1層往後,也還是有兩個彈珠,這就回到了遞迴的思路上了。
在這種沒有碎掉的情況下,假如總共有n層,那麼n層的最多次數等於n-i層的最多次數。所以
針對使用者隨機選擇的這一層i, 以上1和2兩種情況, 求其最大值就是最差情況下的次數。
使用者隨機選擇的這個i,也可以變化的,取值 1,2,3...n. 那麼我們就會得到不同的值。
針對1,2,3...n. 會有n個,所有這些值中取最小,就是最優解。 用f(n)表示這個最優解,那麼f(0)由於沒有樓層,所以一定等於0,也就是說不需要實驗。
f(0) = 0;
f(n)= min(max(1, f(n-1) + 1), max(2, f(n-2)+ 1)... max(n, f(0)+ 1))
f(0) = 0;
f(1) = 1;
f (2) = min(max(1, f(1)+ 1), max(2, f(0) + 1)) = 2;
可以使用遞迴演算法求得其值,最終的結果是9次。
[size=large]下面是程式碼[/size]
[size=large]
列印結果:
[/size]
optimal steps:9
selections:[3,11,18,24,29,33,36,38,39]
[size=xx-large]完畢[/size]
Jar Hell 問題解決方案
最近看到溫紹錦的jvm基礎,裡面看到這個jar hell問題的解決方法,之前遇到過一次,是乙個資源檔案,當時覺得挺麻煩,不知道還有這個方法,很棒,特地整理了下,記錄到這裡來,這個部落格開了好長時間了,一直以來也懶得寫東西,以後會堅持更新些。classloader classloader thread...
top K問題解決方案
1.使用最大最小堆。求最大的數用最小堆,求最小的數用最大堆。2.quick select演算法。使用類似快排的思路,根據pivot劃分陣列。3.使用排序方法,排序後再尋找top k元素。4.使用選擇排序的思想,對前k個元素部分排序。5.將1000 個數分成m組,每組尋找top k個數,得到m k個數...
Ajax post亂碼問題解決方案
今天測試乙個ajax元件的時候遇到亂碼問題,在網上找了很多解決方案都未能解決,原因可能我出現亂碼的問題不在傳輸過程,而且是在頁面上就已經出現亂碼了,現象很奇怪,我直接把引數賦值為中文後alert,發現是亂碼,所以不管我怎麼設定和在後台解碼都依然是亂碼。後來找到原因,共分兩點 第一 我的meta標籤設...