面试算法03-高楼扔球求临界破碎楼层

且看题:

有100层楼,已知从某层扔下玻璃球会碎,给你两个玻璃球,请用最优策略实验出临界的破碎楼层

注意题,是给出最优实验策略,我们可不能拿一个小球从一层开始扔,然后一层一层往上加,这样的话最坏的情况下会扔99次(因为99层不管碎没碎,我们都知道结果了),而且还浪费了一个球。
那既然有两个球,可不可以用简单的折半法呢,比如50层扔一个,没碎的话,用另一个球从51层往上扔,最坏的情况下是1+49=50次,如果碎了的话,我们再折半,从25层扔另一个球,嗯,又碎了,然后呢,然后没球了(┬_┬)
可见以上两种扔法都不能解出此题,但仔细想想,以上两种扔法都有一个共同点,也是解此题的关键,即:两次扔球的区间间隔!第一种扔法看似么有区间,其实可以看作区间为0,第二种区间为50,此题求最优策略(注意不是最少),可以理解为无论临界楼层是几层,这种策略的最多扔球次数都是一样的,那么我们的扔球区间该怎么选呢?
假设我们第一次扔球从第n层扔:

  1. 如果碎了,那么第二颗球就应该从第一层往上扔,最坏次数为1 +(n - 2)- 1 + 1 = n - 1次,解释一下,即:第一次扔球次数 1加上本次实验最高层减去最底层并加1,n - 2层是最后一次实验的楼层,因为已知n层碎了,当
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值