面试高频智力题 100层楼两个鸡蛋找出临界点的最多次数 (直接分析法,非动态规划思路)

有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。(假设每次摔落时,如果没有摔碎,则不会给鸡蛋带来损耗)

 

很容易陷入一个误区,就是用二分法,但要注意,鸡蛋个数是有限的,只有两个,所以二分是不对的。只有当蛋的个数是无限个的时候,才能二分。此时最小次数就是7次

 

如果只有一个鸡蛋,那么只能一层一层的尝试,就需要仍100次

 

如果两个鸡蛋,一个拍脑袋的想法就是,第一个鸡蛋在10,20,30,100层仍,第二个鸡蛋最坏扔9次。

最坏情况下19次确定

这样由一个问题,每次往后,第二个鸡蛋都是扔9次,第一个鸡蛋的次数在逐渐增大,能不能改进,第一个鸡蛋,每次不是固定间隔仍,而是少一个,这样能保住,第一次和第二次总和不变:

n+n-1+... + 1 >= 100

14      27,  39,  50, 60, 69, 78, 85, 92, 99, 100

这样的最坏的次数是14次

 

动态规划思路:

dp(T,N)表示T层楼,N个鸡蛋最多仍的次数。

 

假设仍一个鸡蛋到k层,如果这个鸡蛋不碎,那么剩下确定的个数,就等价于dp(T-k,N-1), 如果鸡蛋不碎,就等价于dp(k-1,N-1), 由于我们可以控制第一个鸡蛋的选取,所以最后的转移方程是

dp(T,N) =  min_k (max(dp[T-k,N-1) + dp(k-1,N-1)) + 1;

 

代码实现,Leetcode 887题,暂略

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值