LeetCode算法学习之鸡蛋掉落

完整代码实现

java 复制代码
class Solution {
    public int superEggDrop(int k, int n) {
        int[][] dp = new int[n + 1][k + 1];
        int m = 0;
        while (dp[m][k] < n) {
            m++;
            for (int i = 1; i <= k; i++) {
                dp[m][i] = dp[m - 1][i - 1] + dp[m - 1][i] + 1;
            }
        }
        return m;
    }
}

解题思路:

动态规划定义

定义 dpmk 为用 k 枚鸡蛋和 m 次尝试,最多能检查的楼层数。其递推关系为:

如果在某一层扔鸡蛋:

鸡蛋碎了:剩下 k-1 枚鸡蛋和 m-1 次尝试,能检查 dpm-1k-1 层。

鸡蛋没碎:剩下 k 枚鸡蛋和 m-1 次尝试,能检查 dpm-1k 层。

当前层:无论碎没碎,当前层本身也算一层检查。

因此,状态转移方程为:

dpmk = dpm-1k-1 + dpm-1k + 1

初始化

dpk = 0:0 次尝试无法检查任何楼层。

dpm = m:只有 1 枚鸡蛋时,必须线性检查(最多 m 层)。

算法流程

初始化二维数组 dp:大小为 (n+1) x (k+1),所有元素初始为 0。

逐步增加尝试次数 m:

对于每个 m,计算 dpmi(i 从 1 到 k)。

当 dpmk >= n 时,返回 m。

填充 dp 表:

按行(m)填充,每行更新所有鸡蛋数 i 的值。

相关推荐
一隅论数智2 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
XiHongShi20162 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本2 天前
离散数学第六课
学习·离散数学
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark2 天前
大规模并行计算中的负载均衡算法研究4
算法