首页 > 其他分享 >(nice!!!)(LeetCode) 1884. 鸡蛋掉落-两枚鸡蛋(动态规划 dfs递归和递推 || 数学)

(nice!!!)(LeetCode) 1884. 鸡蛋掉落-两枚鸡蛋(动态规划 dfs递归和递推 || 数学)

时间:2024-10-14 18:53:11浏览次数:3  
标签:return sta int 鸡蛋 mn twoEggDrop dfs 1884

题目:1884. 鸡蛋掉落-两枚鸡蛋

在这里插入图片描述
在这里插入图片描述

方法一:动态规划dp+递归dfs+记忆化搜索。时间复杂度0(n^2)。

C++版本:

class Solution {
public:
	//状态sta[i]表示:i层找到f所需要的最小操作次数
    int sta[1010];
    int twoEggDrop(int n) {
    	//层数为0时,直接返回0
        if(n==0) return 0;
        //遍历过
        if(sta[n]) return sta[n];
        //初始化最大值
        int mn=n;
        //遍历可以选中哪层楼
        for(int i=1;i<n;i++){
        	//如果在i层鸡蛋破碎了,那么我们只能从最低的层数开始往上。
        	//如果在i层鸡蛋完好,那f就在i+1~n层,这就类似于在1~n-i层之间寻找。
        	//这两种方案中选取最大需要的操作次数,再去和其他的i层进行比较。
            mn=min(mn,max(i,twoEggDrop(n-i)+1));
        }
        //记忆化
        return sta[n]=mn;
    }
};

JAVA版本:

class Solution {
	//状态sta[i]表示:i层找到f所需要的最小操作次数
    private static final int[] sta=new int[1010];
    public int twoEggDrop(int n) {
    	//层数为0时,直接返回0
        if(n==0) return 0;
        //遍历过
        if(sta[n]>0) return sta[n];
        //初始化最大值
        int mn=n;
        //遍历可以选中哪层楼
        for(int i=1;i<n;i++){
        	//如果在i层鸡蛋破碎了,那么我们只能从最低的层数开始往上。
        	//如果在i层鸡蛋完好,那f就在i+1~n层,这就类似于在1~n-i层之间寻找。
        	//这两种方案中选取最大需要的操作次数,再去和其他的i层进行比较。
            mn=Math.min(mn,Math.max(i,twoEggDrop(n-i)+1));
        }
        //记忆化
        return sta[n]=mn;
    }
}

方法二:动态规划dp+递推。时间复杂度为0(n^2)。
C++版本:

class Solution {
public:
    int twoEggDrop(int n) {
		//状态f[i]表示:i层找到f所需要的最小操作次数
        vector<int> f(n+1,0);
        for(int i=1;i<=n;i++){
        	//初始化最大值
            f[i]=i;
        	//遍历可以选中哪层楼
            for(int j=1;j<i;j++){
	        	//如果在j层鸡蛋破碎了,那么我们只能从最低的层数开始往上。
	        	//如果在j层鸡蛋完好,那f就在j+1~n层,这就类似于在1~n-j层之间寻找。
	        	//这两种方案中选取最大需要的操作次数,再去和其他的j层进行比较。
                f[i]=min(f[i],max(j,f[i-j]+1));
            }
        }
        return f[n];
    }
};

JAVA版本:

class Solution {
    private static final int[] f=new int[1010];
    public int twoEggDrop(int n) {
        for(int i=1;i<=n;i++){
            f[i]=i;
            for(int j=1;j<i;j++){
                f[i]=Math.min(f[i],Math.max(j,f[i-j]+1));
            }
        }
        return f[n];
    }
}

方法三:数学推导。

假设有x次操作次数,求n最大可以是多少。
第一次选最多只能选第x层:如果碎了,就可以从1开始往上。
如果没碎,第二次选最多只能选第x-1层:如果碎了,就可以从x+1开始往上。

直到最后最多只能选第1层:如果碎了,下一层就是答案;没碎,当前就是答案。

x+(x-1)+…+1>=n,即x^2+x-2n>=0。解方程,答案就是(sqrt(8n+1)-1)/2

C++版本:

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

JAVA版本:

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

标签:return,sta,int,鸡蛋,mn,twoEggDrop,dfs,1884
From: https://blog.csdn.net/weixin_46028214/article/details/142925141

相关文章

  • Boc-Val-Ala-PAB-PNP|CAS号:1884578-00-0多肽化合物
    Boc-Val-Ala-PAB-PNP是一种多肽化合物,其中包含了多个保护基团和特定的氨基酸序列。下面是对该化合物的详细解析:基本信息英文名:Boc-Val-Ala-PAB-PNPCAS号:1884578-00-0分子式:C27H34N4O9分子量:558.58结构式:分子结构1.**Boc**(叔丁氧羰基):  -这是一种常用的氨基酸N端......
  • hdfs小文件分析
    导出namenode的元数据文件,并将数据转成csv格式,逗号分割字段hdfsdfsadmin-fetchImage ./#将文件拉到本地hdfsoiv-ifsimage_0000000000243832876-ofsimage.csv-pDelimited -delimiter","  -Xmx30720m  #使用hdfs工具本地解析文件,我的镜像是30G,我就用了30的堆......
  • 深入理解HDFS 错误恢复
    我们从动态的角度来看hdfs先从场景出发,我们知道hdfs的写文件的流程是这样的:数据以pipeline的方式写入hdfs,然后对于读取操作,客户端选择其中一个保存块副本的DataNode来读数据.考虑这样两个场景:hbasers在写wallog的时候.如果一个rs挂了.那么这个rs会转......
  • Spark的前瞻--- 数据处理方式,HDFS读写流程,MR计算原理,YRAN资源调度原理,分布式计算
    目录一,数据处理的方式1,单机数据处理2,集群数据储存1,HDFS的读写流程 4,分布式资源调度YRAN1,YRAN原理图二,分布式计算框架1,MapReduce分布式计算2,Spark分布式计算spark的部署方式1,spark资源调度yran模式三,Spark的开发方式1,交互式开发2,脚本式开发......
  • 自定义DFS,DFT,DTFT函数并比较关系
    一、DFS(离散傅里叶级数)functiony=DFS(x,L)N=length(x);xi=[x;zeros(L-N,1)]; y=zeros(1,L);fork=1:Lsum=0; forn=1:Lsum=sum+xi(n)*exp(-2j*pi*k*n/L); end y(k)=sum; end end 二、DFT(离散傅里叶变换) functiony=DFT(x,L)N......
  • 数据结构课程设计大项目————迷宫问题(邻接矩阵,prim生成算法,DFS寻路,BFS寻路,路径回溯
    一.前言迷宫问题是数据结构中最值得实践的大项目之一,本文主要讲解思路,提供的代码大部分都有注释(没有的就是太多了懒得写了QAQ)。为了更好的表现效果,该程序使用了easyx可视化,easyx简单易学(大概一天到两天就可以学会),上手简单。该程序由c语言实现,本人水平有限程序可优化空间很大。......
  • Codeforces Round 316 (Div. 2) D题 Tree Requests(二分,dfs,在线,前缀异或)
    题目链接CodeforcesRound316(Div.2)D题TreeRequests思路将262626个字母全部当作一个二进制数。将每个深度的结点按照dfs序放到一个vector里,同时记录每个vector......
  • 基于zookeeper安装部署下,配置 HDFS-HA 集群
    一、目录准备:1.在erport目录下创建一个ha文件夹cd/erportmkdirha将/erport/servers/下的hadoop拷贝到/erport/ha目录下:直接移动(本教程所采用):mv/erport/servers/hadoop/erport/hacd/erport/halscd/erport/ha/hadoop/etc/hadoopcphadoop-env.shhadoop......
  • 基于zookeeper安装部署下,配置 HDFS-HA 自动故障转移
    (1)访问 hdfs-site.xml:vi/erport/ha/hadoop/etc/hadoop/hdfs-site.xml在hdfs-site.xml中增加:<!--开启失败故障自动转移--><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></propert......
  • codeforces round 975 E(div.2)(lambda表达式实现dfs,min_element函数,一定要优化重复的
    解题历程:看到题目要求要用最少的消除次数让所有叶子深度相同,通过观察,那么就只需要将所有深度都尝试一遍就行了,可是我当时没多想就用dfs记录所有节点的深度,单独将所有叶子和该叶子的深度存起来,记录最大的深度,从最大深度尝试到深度0,对于深度小于当前尝试深度的叶子,用dfs的方式将与......