确定鸡蛋最高摔坏楼层的面试题 问题描述:给两个鸡蛋,确定鸡蛋从楼上摔下会摔坏的最高楼层,并且使试摔次数最少。最高100层。最低可摔楼层为2楼,若100层没破,则最高楼层为99。 方法一:二分法 1蛋第一次在50 [即(100+1)/2]层试摔 若破了,2蛋从2层开始往上摔,直到找到最高摔不破楼层。 若没破,1蛋从[(50+100)/2]层开始试摔,依次二分,直到1蛋破了,2蛋从1蛋破之前的试摔楼层开始逐层向上试摔,直到找到最高摔不破楼层。 最坏情况:1蛋在50层破了,2蛋在49层破了,共摔了49次。 方法二:十分法 1蛋第一次在10层试摔 若破了,2蛋从2层开始试摔,直到找到最高摔不破楼层。 若没破,1蛋从20层开始试摔,若没破楼层依次加10,直到摔破为止,2蛋从1蛋破之前的试摔楼层开始逐层向上试摔,直到找到最高摔不破楼层。 最坏情况:1蛋在100层破了,2蛋在99层破了,共摔了19次 方法三:等差法 1蛋第一次在14层摔 若破了,2蛋从2层开始往上摔,直到找到最高摔不破楼层。 若没破,1蛋从14+13层开始摔,若没破,楼层增量为本次增量-1,直到摔破为止,2蛋从1蛋破之前的试摔楼层开始逐层向上试摔,直到找到最高摔不破楼层。 1蛋的可能楼层为14,27,39,50,60,69,77,84,90,95,99 最坏情况:不管1蛋何时破(100除外),2蛋破在1蛋破的前一个楼层,共摔了14次 此题利用分治的思想,1蛋确定范围,2蛋精确定位。 十分法不管1蛋在哪破,2蛋的最大试摔次数都是一样的,导致1蛋试摔次数越多,最大的试摔次数也越多。 等差法把1蛋试的试摔次数从2蛋的试摔次数中扣除,1蛋试摔次数越多,2蛋可能的试摔次数越少。 等差法的关键是确定1蛋第一次的试摔楼层n,1蛋以后的试摔层数为:[当前层数]+[n]-[1蛋的试摔次数]。这个n也为最坏情况下的试摔次数。应该有{max(n)|1+2+...+n<=100} 因为要求试摔次数最少,所以n不能太大 而如果n太小,1蛋的可能试摔次数会超过n,导致最坏的试摔次数变大。 利用等差法,可以摔出任何想要的比最小值大的最坏试摔次数(当然小于99)。 如果有多个蛋,留两个蛋来实施等差法,用其余的蛋来实施二分法,减小问题的规模。 |
确定鸡蛋最高摔坏楼层的面试题
最新推荐文章于 2020-05-11 09:01:33 发布