谷歌面试题1:100层摔玻璃球

1,638 阅读1分钟

问题:

  • 给你两个一模一样的玻璃球。这两个球如果从一定高度掉到地上就会摔碎,当然,如果在这个高度以下往下扔,怎么都不会碎,超过这个高度肯定就一次摔碎了。
  • 现在已知这个恰巧摔碎的高度范围在1层楼到100层楼之间。如何用最少的试验次数,用这两个玻璃球测试出玻璃球恰好摔碎的楼高。

image.png

答案:

  • 方法1:一层层试,需要99次

  • 方法2:二分法,a+b= 50 , 1 + 49 = 50(第二次使用1到49尝试)

  • 方法3:用粗调和细调方法:每10层,试验一次,发现摔碎,就从该层,从1-10进行试验,最多20次就能找到具体的楼层。

  • 更优方法:使用等差数列,指定一个理想值,假定是18层开始,基于18再去一一比较,每次排完的下一个应该是 n-1 。每次的总和次数都要小于等于18次。如第一次0 + 18 ,第二一定是 1 + 17 ,第三次一定是 2 + 16。得出的公式是 n + (n-1) + (n-2) + (n-3) …>= 100 等价于 n(n+1) / 2 >= 100 等于13.6 等于14。

  • 对应的逻辑14、13、12、11...3、2、1。也就是说在14、27、39、50、60、69、77、84、90、95、99为临界层