[面试题]100层楼丢玻璃球,一旦超过某层就会破,你只有两个球。

题目:

 有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??

 

思路:最简单的,扔一个到51层 ,碎了,再试后面50层 ,没碎再从第一层试前面50层,总共50次。时间复杂度较高。是个烂方法.

          有没有一种方法,能分段查找呢。一个球均匀分段的扔,比如 分为20层一次地扔,如果在40层破,我从20层扔到40层。这样大大提高了效率。但是怎样才能得到好的分段呢?第一次扔k层 ,则次数time=1,第二次,如果破了,要试从1到k-1层,此时需要sumTime=time+k-1=k 次;  

如果没破,还要从2k层扔,则次数为time=2;如果破了,还需要扔k+1到2k-1层,再加上前面扔的两次time=2, 即 sumTime=time+k-2=k。还是k 次;

注意每多扔一次 少测试一层。次数却多一次。且实际只要能测到n-1层就够了

那么假设扔k次能知道临界点,共有n层楼.
 

以此类推如果满足 k+(k-1)+(k-2)+(k-3)+(k-4)+....+(k-k+1) >=n-1 。

可以化简得到:k(k-1)>=2(n-1)

这里,n=100 所以 解得k=14。

所以只要14次就可以确认那层试临界层。

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值