瓶子破碎的最高安全楼层

                                        我辈喜学剑,十年居寒潭。一朝斩长蛟,碧水赤三月


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))

 

 

 

 

 

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