瓶子破碎的最高安全樓層

                                        我輩喜學劍,十年居寒潭。一朝斬長蛟,碧水赤三月


Description:

有n層的樓,有兩個強度相同的瓶子,設計一個辦法來檢測該種瓶子的可以承受的最高樓層。 

如果,瓶子從第x樓扔下後不會碎,從第x+1層扔下來之後碎了,則其最高承受樓層爲x。瓶子不碎的話可以撿起來繼續扔。

 

方法1:

interview時臨時想起的,腦子中冒出來了快慢指針的思想,於是想出來該種方法,思路是對的,但是不是最好的。  見多識廣的重要性阿。

 

記瓶子的最高承受層爲Max;

每隔兩層扔一次,例如,第一個瓶子從1層扔,第二個瓶子從4層扔,有以下結果:

#第1瓶子碎了,則Max=1

#第1瓶子沒碎,第2個瓶子碎了,則,Max=2或3,再扔一次檢測這兩層即可;

#第1瓶子沒碎,第2個瓶子沒碎,則,從第7層開始扔;

最差時間複雜度: n/4 *2 +1   --->o(n)

 

方法2:

先扔一個瓶子,從底層往上, 每隔 n^(1/2),扔一次,如果某次扔下後碎了,則開始用另一個瓶子來檢測n^(1/2)個樓層即可。

舉例:

n=100, n^(1/2)=10, 最壞情況是,先扔9次,10層,20層,... , 100層, 到100層時才碎,然後,用另一個瓶子檢測91-99這幾個樓層,即從第91層開始扔,最壞是扔到99層才碎。 則共扔了10+9次。

時間複雜度:

n / ( n^(1/2) ) + n^(1/2) -1 = 2 * n^(1/2)  - 1    ------->o(n^(1/2))

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章