Skip to content
大纲

谷歌扔鸡蛋面试题

  1. 如果是一个鸡蛋,保险起见只能自下而上,一层层试,所以有两个鸡蛋,可以用一个先找到大致范围,然后再用另一个,自下而上,在这个区域一层层找。
  2. 所以涉及了两个范围,第一个和第二个鸡蛋的自下而上的次数。
    • 比如100层,第一个鸡蛋每次以10层为单位往上找,在i层碎了,说明第一次查找的大致范围为i ~ i-10
    • 然后在从i-10开始往上查找,直到在这个范围找到。
    • 但比如在16和96层是寻找的位置,在16,第一个鸡蛋找2次,第二个鸡蛋找6次,共8次。在96,第一个鸡蛋找10次,第二枚鸡蛋6次,共16次,在高层找的次数比较多
  3. 为了平衡高低层的次数,那就得尽量平衡第一次和第二次的次数,可以想象下99乘法表梯队,把垂直看作第一个鸡蛋分块,横向作为第二个鸡蛋的查找楼层,得到以下类似
n
  n-1 n-2
  n-3 n-4 n-5
  ...
  n-x n-x-1 ... 1
  1. 所以问题就转为怎么把全部楼层这样划分,分了几块,转为js
js
function drop (n) {
    let num = 0 // 第一个鸡蛋的分块层
    let flag = 0 // 循环次数,看作扔鸡蛋次数
    for (let i = n ; i > 0; i -= num ) {
      flag++
      let c = flag
      num++
    }
    return flag
  }
  console.log(drop(135))

Released under the MIT License.