鸡蛋掉落问题

探讨了在n层楼和m个鸡蛋的情况下,找出鸡蛋从哪一层及以上掉落会破碎的临界点所需的最少尝试次数。分析了特殊情况下如只有一个鸡蛋和无限鸡蛋的解决方案,并详细解释了使用两枚鸡蛋时如何通过不同间隔策略降低平均尝试次数。给出了数学公式和代码实现,还提及了n枚鸡蛋的动态规划解法及时间复杂度。
摘要由CSDN通过智能技术生成

两枚鸡蛋的题目链接

题目背景:

有n层楼,m个鸡蛋。
有一个临界点x,鸡蛋从临界点x上面掉落就会碎,从临界点x及临界点x以下掉落就不会碎。
求计算出x的确切值需要扔鸡蛋的最小次数

考虑特殊情况

以有100层楼为例
两个极端情况:

  • 假设只有一个鸡蛋,那么就需要从下到上依次去尝试,比如x=30,肯定是要先从第一楼扔下去,再从第二楼扔下去,一直尝试到第30楼;如果一开始就是从第50楼扔下去的话,无法确定具体范围。
  • 假设有无限个鸡蛋,那么我们可以用二分来缩小范围,最后需要的次数就是log2(n)

两枚鸡蛋

现在考虑一下2枚鸡蛋的情况
我们可以用第一枚鸡蛋缩小范围,用第二枚鸡蛋精准定位,比如100层的话,可以分为10组,每组都有10层楼。
从第一组开始试验,如果试验到第三组,鸡蛋破碎,那么第二组肯定是没问题的,所以临界点x一定在第三组里,再用第二个鸡蛋从低楼层开始试验,先试21楼,22楼这样。
这样最少的次数是1,最多的次数是19。
有没有可能平均一下呢
如果间隔相等的话,对于第二枚鸡蛋,扔的次数都是一样多的,但是对于第一枚鸡蛋,临界值越往后,扔的次数越多,所以可不可以修改一下间隔,让前面的间隔大,后面的间隔小,这样平衡一下平均次数呢
假设第一组的楼层数为t,第二层的为t-1,第三层的为t-2,这样以此类推,最后一层的为1
所以就是t+t-1+t-2+t-3+……+1>=n
根据公式可以显而易见的得出结果

代码如下:注意要上取整

class Solution {
   
public:
    int twoEggDrop(int n) {
   
        return ceil((-1+sqrt(1+8*n))/2);
    }
};

n枚鸡蛋

假设dp[i] [j] 表示用i层楼 j个鸡蛋最少试几次能够找到临界点
测评地址
时间复杂度 O (

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值