力扣题解(鸡蛋掉落)

news2024/10/21 11:45:23

887. 鸡蛋掉落

已解答

困难

相关标签

相关企业

给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。

已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。

每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层 x 扔下(满足 1 <= x <= n)。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中 重复使用 这枚鸡蛋。

请你计算并返回要确定 f 确切的值 的 最小操作次数 是多少?

思路:

首先,该问题是一个动态递归的问题,且一维无法表示,因此需要二维。

f[i][j]表示一共i层楼,有j个鸡蛋的最小操作次数。

f[i][j]的值取决于选择的楼层k,k从1到i,对于一个确定的k,若鸡蛋碎了,则楼层范围变成k到i,一共i-k层楼,j-1个鸡蛋,就是f[i-k][j-1],若鸡蛋没碎,则楼层变成k-1层,鸡蛋仍然是j个,就是f[k-1][j],f[i][j]就是所有k取值的最小值,因此暴力做法就是三重循环,第一重表示总的楼层数,第二重是当前的鸡蛋数,第三重是选择丢鸡蛋的楼层,时间复杂度是O(N^2 *K),其中N表示楼层数,k表示鸡蛋总数,会超时。优化的地方是扔鸡蛋的楼层的选择。可以明显的发现,当扔鸡蛋的楼层变高的时候,f[k-1][j]是增大的,而f[i-k][j-1]是减小的,而要求的是同一个k对应的二者的最大值,因此只要找到交点附近的整数,就是解的取值,可以采用二分的思路。

对于二分,若交点刚好是整数,则最小的解就是当前的交点。否则,解是交点左右的两个整数取得的解,令l=1,r=n,当l+1<r不再成立的时候,l和r就是所要求的点。最小的解就是在这两个中的取得,时间复杂度变成了O(NlogN *K)。

class Solution {
public:

   map<int,int>hash;

    int superEggDrop(int k, int n) 
     {
        return dp(k,n);
     }

     int dp(int k,int n)
     {
       if(hash.count(n*100+k))
     {
        //
     }
      else
      {
        int ans=0;
        if(n==0)
         ans=0;
         else if(k==1)
         ans=n;
         else
         {
             int l=1,r=n;
        
             while(l+1<r)
             {
                int mid=(l+r)/2;
                int t1=dp(k-1,mid-1);
                int t2=dp(k,n-mid);

              if(t1>t2)
                r=mid;
                else if(t1<t2)
                l=mid;
                else
                l=r=mid;
             }

      
             ans=min(max(dp(k-1,l-1),dp(k,n-l)),max(dp(k-1,r-1),dp(k-1,n-r)))+1;
       
         }
         hash[n*100+k]=ans;
         
      }
      return hash[n*100+k];
      
    
     }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM可视化监控

1 JConsole 一、介绍 JConsole 是一种 Java 监控和管理控制台工具&#xff0c;可以用于监视 Java 虚拟机&#xff08;JVM&#xff09;的性能和资源利用情况。它提供了一种图形化界面&#xff0c;可以实时查看 JVM 的运行状态、内存使用情况、线程活动、垃圾回收等信息&#xf…

Spring 实现 3 种异步流式接口,干掉接口超时烦恼

大家好&#xff0c;我是小富&#xff5e; 如何处理比较耗时的接口&#xff1f; 这题我熟&#xff0c;直接上异步接口&#xff0c;使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性&#xff0c;处理结果仅返回单个值。在某…

每日OJ题_牛客_小乐乐改数字_模拟_C++_Java

目录 牛客_小乐乐改数字_模拟 题目解析 C代码 Java代码 牛客_小乐乐改数字_模拟 小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a; 小乐乐喜欢数字&#xff0c;尤其喜欢0和1。他现在得到了一个数&#xff0c;想把每位的数变成0或1。如果某一位是奇数&#…

Python 工具库每日推荐【PyAutoGUI】

文章目录 引言Python桌面自动化库的重要性今日推荐:PyAutoGUI工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:自动化图像识别和点击案例分析高级特性失败安全机制相对坐标操作扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 Python工…

如何远程查看孩子的电脑使用?

越来越多的家庭拥有了多台电脑和智能设备。家长们往往没有办法时刻陪伴在孩子身边&#xff0c;监督他们的上网行为。而远程控制电脑可以帮助家长在任何时间、任何地点对孩子的电脑进行监控和管理&#xff0c;确保他们能够安全、健康地使用互联网。 通过远程控制软件&#xff0c…

锦锐科技CA51F7系列笔记

1、PWM &#xff08;1&#xff09;芯片一共有6个PWM通道&#xff08;PWM0~PWM5&#xff09; &#xff08;2&#xff09;IRCH时钟&#xff08;IRCH 频率为 16MHz&#xff09; &#xff08;3&#xff09;IRCL时钟&#xff08;IRCL频率为100KHz&#xff09; &#xff08;4&…

JavaScript 命令模式实战:打造可撤销的操作命令

一. 前言 在前端开发中&#xff0c;命令模式&#xff08;Command Pattern&#xff09;作为一种行为型设计模式&#xff0c;可以帮助我们将请求封装成一个对象&#xff0c;从而实现调用对象和执行对象之间的解耦&#xff0c;方便扩展和修改。 本文将和大家分享 JavaScript 中的…

实战子网掩码划分问题

拓扑要求总部有2个业务段&#xff0c;分部也有3个业务 还有互联地址段&#xff0c;还有管理地址段&#xff01;&#xff01;&#xff01;&#xff01; 23117 个段 192.168.1.0/24 怎么划分呢&#xff1f; 1 根据要求划分地址段 192.168.1.0/24 要划分7个网段那就…

linux------缓冲区与C库的原理

前言 一、缓冲区 缓冲区的作用是提高效率&#xff0c;因为将数据写入到设备&#xff0c;是需要调用系统接口的&#xff0c;如果每次写入缓冲区的数据就调用一次系统调用&#xff0c;涉及到系统调用这时操作系统就会介入&#xff0c;用户态转为内核态&#xff0c;这个过程需要时…

自然语言到 SQL 的曙光:我们准备好了吗?

发布于&#xff1a;2024 年 10 月 08 日 各位读者&#xff0c;国庆假期已过&#xff0c;我们打工人要开启奋斗新征程了&#xff0c;今天小编也是刚上班假期综合征还没过去&#xff0c;就被抓过来读论文&#xff0c;还好我在假期没闲着&#xff0c;整理了几篇关于 NL2SQL 的最新…

周易解读:两仪01

两 仪01 上一节里面&#xff0c;我们讲解了太极的知识。关于太极呢&#xff0c;它是可以有着多方面的含义。在这里呢&#xff0c;我们主要地&#xff0c;选取它的宇宙生成中的一种含义&#xff0c;认为太极是有所萌动&#xff0c;有所积累&#xff0c;但是呢&#xff0c;就是…

【YOLOv11】实战一:在LabVIEW 中使用OpenVINO实现YOLOv11

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『LabVIEW深度学习实战』 &#x1f4d1;推荐文章&#xff1a;『LabVIEW人工智能深度学习指南』 &#x1f37b;本文由virobotics(仪酷…

单体应用、SOA 和微服务架构的区别

在软件架构的发展历程中&#xff0c;单体应用、面向服务架构&#xff08;SOA&#xff09;和微服务架构都有着各自的特点和适用场景。了解它们之间的区别&#xff0c;有助于我们在不同的项目需求下做出更合适的架构选择。 一、单体应用 &#xff08;一&#xff09;定义与特点 …

DAY8 Final等

Final关键字 final修饰静态变量&#xff0c;这个变量今后被称为常量&#xff0c; 可以记住一个固定值&#xff0c;并且程序中不能修改了&#xff0c;通常这个值作为系统的配置信息。常量的名称&#xff0c;建议全部大写&#xff0c;多个单词用下划线连接。 public static final…

PaddleOCR的包装生产日期识别_随记1

一、前言 项目难点 没有训练数据图像质量层次不齐: 角度倾斜、图片模糊、光照不足、过曝等问题严重 二.、环境搭建 本任务基于Aistudio完成, 具体环境如下&#xff1a; 操作系统: LinuxPaddleOCR: PaddleOCR_2.7text_renderer: masterpaddlepaddle-gpu2.6.0cuda版本是11.8,…

量化投资学习

1:投资定义就是付出一定的代价&#xff0c;期望能够得到一定汇报&#xff0c;可能会出现没有回报 2&#xff1a;投资分析流派 2.1:宏观策略分析法&#xff1a;从宏观经济大方向入手&#xff0c;再应用到具体股票也叫自上而下的研究方法&#xff0c;需要理解这个趋势的核心驱动…

TS中的接口、泛型、自定义类型 与vue3的使用

泛型的使用场景&#xff1a; 当我们定义了一个对象时&#xff0c;在多次传值的过程中&#xff0c;其对象中的属性值被更改了&#xff0c;以至于后期拿不到我们需要的数据。 举个例子&#xff0c;当我们使用person.name时&#xff0c;是可以使用的。但是多次传递之后&#xff…

讯方·智汇云校华为ICT大赛赛前辅导直播安排

华为ICT大赛赛前辅导直播安排 网络赛道在“智汇云校”视频号上观看。 直播时间&#xff1a; 网络&#xff1a;2024.10.14-10.15-10.17-10.18-10.21-10.23-10.25-10.28-10.29-10.30-11.1-11.4-11.5-11.6&#xff0c;每晚19&#xff1a;30-22&#xff1a;00 安全&#xff1a;2024…

【Next.js 入门教程系列】05-数据库

原文链接 CSDN 的排版/样式可能有问题&#xff0c;去我的博客查看原文系列吧&#xff0c;觉得有用的话&#xff0c; 给我的库点个star&#xff0c;关注一下吧 上一篇【Next.js 入门教程系列】04-构造 API 数据库 本篇包括以下内容: Setting up PrismaDefining data modelsCreat…

pinia学习笔记(1.0)

首先贴出官网地址&#xff1a;开始 | Pinia pinia作为Vue3项目中常用的状态管理工具&#xff0c;正逐渐取代vuex&#xff0c;现从0到1自己搭建pinia仓库。 首先&#xff0c;安装pinia&#xff0c;使用包管理器工具&#xff08;npm,pnpm,yarn,Bun等都可以&#xff09; 安装成…