力扣887题-鸡蛋掉落
你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。
每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。
你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。
每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。
你的目标是确切地知道 F 的值是多少。
无论 F 的初始值如何,你确定 F 的值的最小移动次数是多少?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/super-egg-drop
java
假设我们只有一个鸡蛋,为了测出F,我们只能从第一层一层层的往上试,直到鸡蛋被摔碎为止,题目考虑的是最坏情况的最少次数,所以最坏情况是到第N层才摔碎,所以次数即为楼层数,即一个鸡蛋,一层楼,要移动1次.一个鸡蛋,两层楼,要移动2次…
假设我们有无数个鸡蛋,那么最优的方法肯定是二分法,即100层楼,先试第50层楼,不管摔碎与否,都能排除掉一半的可能,考虑最坏情况,最后移动的次数为log2 N次,向上取整
但关键我们的鸡蛋有限,所以我们为了效益最大化,我们先选一个楼层,先设这个楼层为mid,假设在这个楼层扔可以得到最优解,那么我们扔完后有2种情况,一是蛋碎,那么我们只需考虑K-1个蛋在N-mid的楼层里的最优解。第二种情况是蛋没碎,那么我们只需考虑K个蛋在mid-1的楼层里的最优解。因为考虑最坏情况,所以我们取这两个情况中,值大的那个,而这两种情况的解一个随mid增大而增大,一个随mid增大而减小,所以当这两种情况的次数一样时,即为mid的取值,即是最小值。
这就相当于把一个大的情况化小,倒推回去,一步步化小,最后化到1个楼层,k个鸡蛋和n个楼层,一个鸡蛋比较。而每化一次,就加一次次数。
所以放映在代码上我们就正着推回去
假设这是个K*N大小的表格
我们从第一个空开始,即一个鸡蛋,一层楼的情况一个个推过去,一直推到K个鸡蛋,N层楼就行,相当于把这张表填完
但在力扣里3个for循环会超时,所以我们用二分法加快速度,用二分法查找什么时候K-1个蛋在N-mid的楼层里的最优解和K个蛋在mid-1的楼层里的最优解相等。
力扣887题-鸡蛋掉落相关推荐
- [Leedcode][JAVA][第887题][鸡蛋掉落][谷歌面试][动态规划]
[问题描述] [887. 鸡蛋掉落] 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑.每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去.你知道存在楼层 F ,满足 ...
- 数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树
将有序数组转换为二叉搜索树 近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫,因此有此次总 ...
- 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!
开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...
- 《剑指Offer》力扣刷题笔记(03-10)
<剑指Offer>力扣刷题笔记(03-10) 最近确实有点闲,想在进组搬砖之前找点有意义的事干,于是,就开始刷<剑指Offer>.<程序员面试金典>等书上的题目,也 ...
- 买卖股票的最佳时机——力扣121题
买卖股票的最佳时机--力扣121题 暴力解法 从前往后,不断将元素之间进行两两比较(类似冒泡排序中),然后不断更新出maxProfit的值.例如数组[7,1,5,3,6,4]中,从7开始,则7 -&g ...
- 力扣编程题-解法汇总
一.力扣链接: 题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 备注:以后每个工作日从前往后刷一道题,然后再加一道每日新题.每天两道题. 二.模版: 标题: 力扣解法汇总5-正则表达 ...
- 力扣417题太平洋大西洋水流问题
力扣417题太平洋大西洋水流问题 题目描述:有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻. "太平洋" 处于大陆的左边界和上边界,而 "大西洋" ...
- 力扣刷题之二叉树的层序遍历
Welcome to you, 每日一刷系列 二叉树的层序遍历 二叉树的层序遍历II 二叉树的右视图 ...
- 程序员面试需要刷力扣算法题吗
这里写目录标题 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一些特征 1.2. 为什么要考查算法 1.3. 目前面试主要考查 3 类 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一 ...
- 『力扣刷题』5275_找出井字棋的获胜者 解题代码
LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5275_找出井字棋的获胜者 * 5275. 找出井字棋的获胜者 显示英文描述* 用户通过次数0* 用户尝试次数0* ...
最新文章
- 【PDF下载】给专业选手的 Python 笔记
- java反射泛型类型,【Java反射】Java 泛型基础
- SpringBoot整合 ActiveMQ、SpringBoot整合RabbitMQ、SpringBoot整合Kafka
- ldap接触(1)之如何把安全证书导入到java中的cacerts证书库
- 陈华钧 | 知识图谱构建,将成为智能金融的突破口
- 作者:李涛,男,南京邮电大学计算机学院、软件学院院长,南京邮电大学大数据研究院院长。...
- 安卓分辨率_安卓界面的尺寸规范有哪些?
- flash flip 效果集
- 20144303《Java程序设计》第10周学习总结
- 安装金蝶K3 提示:“安装包配置文件(setup.lst)文件不存在”
- # JDK7+ MethodHandle
- GJB 5000B-2021下载-见文章结尾
- 微信公众号不限次数发送消息
- Take me to your heart(English Song)
- 福州到横店嘉兴三日游(仅供参考)
- 嵌入式实时操作系统及应用开发(第三版)罗蕾主编光盘镜像
- jmap 几个慎用操作
- 让你效率飞起的右键工具——超级右键
- PTA乙级题解(110题全)
- python凤凰新闻数据分析(四)整合