来自一个古老的公众号(摔手机就是根据扔鸡蛋过来的)
吐个槽先
正如昨天所说,这道题据说它最早见于谷歌的某次面试,由于题目表述容易,而解答相对麻烦,于是被很多人采用,广泛见于一些算法、规划的面试里。
要说清楚这个问题有点难度,有兴趣的小伙伴务必要静下心来仔细看。
首先我想说,该问题的情境构造是有缺陷的。因为在现实中,影响鸡蛋是否会破裂的最重要因素应该是地面的坚硬和平整程度,而不是鸡蛋下落的高度:把鸡蛋从100层楼顶扔进棉花堆,和从2楼扔向坚硬的水泥地面:依常识判断,还是后者更容易碎。就像那句话说的,能够杀死你的是突然的速度改变,而不是高速本身:你会在接触地面的一瞬间死去,而不是死于高速坠落。
不过你懂的,这是题目,认真你就输了。
我们只需要遵循题目本身的设定就好,吐槽可以,不改变事实。
一个鸡蛋的无助
为了更好地解释这个问题,让我们先看一个简化的情况:如果你手头只有一个鸡蛋,该如何找到这个最高安全楼层?
——显然只能一层层地试。简单地说,这个过程就是先在1楼把鸡蛋扔下地,看看碎不碎。
碎了,那么得到最高安全楼层为0。
如果没碎,那么拾起这个鸡蛋,上2楼,再扔下地,看碎不碎。
同样,碎了,那么得到最高安全楼层为1;没碎,那就再拾起鸡蛋奔3楼……
重复这个过程,直到发生两个结果之一:鸡蛋在第N层上首次碎掉,那么得到最高安全楼层为N-1;或者鸡蛋一直没碎,最高安全楼层为100(其实应该大于100,但这道题默认最大是100,所以姑且认为是100)。
由于鸡蛋随时可能会在某一层突然碎掉,而且一旦碎掉就再也没有鸡蛋可用,所以在整个过程中不能有任何投机取巧,只能逐层尝试,否则在任何一层上蛋碎了,我们都不能准确得出最高安全楼层。一个鸡蛋的情况大致如此。虽然答案简单粗暴,但涉及的思路会对两个鸡蛋的情况有所启示。
两个鸡蛋的闹腾
两个鸡蛋的情况下,基本的想法也不难理解:
由于有两个鸡蛋可以用,所以第一个鸡蛋得用来确定一个比较大的范围。
<