代码随想录算法训练营第四十一天| 343. 整数拆分、96.不同的二叉搜索树

news2024/10/6 8:33:30

整数拆分 

题目链接:力扣

  1. 确定dp数组(dp table)以及下标的含义
    dp[i]:分拆数字i,可以得到的最大乘积为dp[i]。
  2. 确定递推公式
    然后有两种渠道得到dp[i]:
        一个是j * (i - j) 直接相乘。
        一个是j * dp[i - j],相当于是拆分(i - j)
    为什么j怎么就不拆分呢?
          j是从1开始遍历,拆分j的情况,在遍历j的过程中其实都计算过了。
          那么从1遍历j,比较(i - j) * j和dp[i - j] * j 取最大的。
          递推公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
    由于在遍历j的过程中,每次都要计算新的dp[i],所以为了取最大值,还要将dp[i]放入max函数中。 
          所以递推公式:dp[i] = max({dp[i], (i - j) * j, dp[i - j] * j});
  3. dp的初始化
    初始化dp[2] = 1,dp[0] 和 dp[1] 没有必要进行初始化,无实际意义
  4. 确定遍历顺序
    由于  dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
    dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历,先有dp[i - j]再有dp[i]。

    由于拆分一个数n 使之乘积最大,那么一定是拆分成m个近似相同的子数相乘才是最大的。那么 j 遍历,只需要遍历到 n/2 就可以,后面就没有必要遍历了,一定不是最大值。
  5. 举例推导dp数组
class Solution {
public:
    int integerBreak(int n) {

        vector<int>dp(n+1);

        dp[2]=1;

        for(int i=3; i<=n;i++)
          for(int j=1; j<= i/2;j++)
        {
            dp[i] = max(max(j*dp[i-j], j*(i-j)),dp[i]);
        }

        return dp[n];

    }
};

代码虽然看上去 很简短,但是想要自己想出来,还是很难!

不同的二叉搜索树

题目链接:力扣

这题有点抽象,下面进行举例: 
n为3的时候,
发现,当1为头结点的时候,其右子树有两个节点,
这两个节点的布局,和 n 为2的时候两棵树的布局是一样的!
(我们求不同树的数量,并不用把搜索树都列出来,所以不用关心其具体数值的差异)。

 

所以dp[3],就是
元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量
元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量
元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量
元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量
有2个元素的搜索树数量就是dp[2]。
有1个元素的搜索树数量就是dp[1]。
有0个元素的搜索树数量就是dp[0]。
所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]

 

  1. 确定dp数组(dp table)以及下标的含义
    dp[i] : 1到i为节点组成的二叉搜索树的个数为dp[i]。
    也可以理解是i个不同元素节点组成的二叉搜索树的个数为dp[i]
  2. 确定递推公式
     dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]
     j 相当于是头结点的元素,从1遍历到 i 为止。
    故 递推公式:dp[i] += dp[j - 1] * dp[i - j];
    其中 j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量
  3. dp数组初始化
    空节点也是一棵二叉树,也是一棵二叉搜索树
    dp[0]=1;  其他情况均可由该种情况推导得出。
    注意dp[0]不能设为0, 否则乘法的结果就都变成0了。
  4. 确定遍历顺序
    由递归公式:dp[i] += dp[j - 1] * dp[i - j]可以看出,节点数为i的状态是依靠 i之前节点数的状态。那么遍历i里面每一个数作为头结点的状态,用j来遍历。
  5. 举例推导dp数组
class Solution {
public:
    int numTrees(int n) {

        vector<int> dp(n+1,0);

        dp[0] = 1;

        for(int i=1; i<=n; i++)
          for(int j=1;j<=i;j++)
        {
            dp[i] += dp[i-j]*dp[j-1];
            cout <<dp[i] << endl;
        }

        return dp[n];
         
    }
};

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

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

相关文章

unit4

目录 carpenterovertakeremainderobjectivepasturedespitegulfshepherdinteriorchorusoppressgrinprofessionalresistantfosterleapembarkneutralelasticcirculateintimidatechopprimarystirappraisallayoutsurvivalentertainmoanlocatepublishpacehearingexplosivecricketvolt…

stable-diffusion-webui 快捷安装教程

简介 stable-diffusion-webui 是一个用来装载Stable Diffusion 模型的网页&#xff0c;可以方便的调用模型生成图片。 stable-diffusion-webui的github地址为&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui 这个库的依赖很多&#xff0c;虽然代码里面有…

NUCLEO-F411RE RT-Thread 体验 (1) - GCC环境 RT-Thread 的移植

NUCLEO-F411RE RT-Thread 体验 (1) - GCC环境 RT-Thread 的移植 1、准备工作 a、用stm32cubemx新建一个工程。 时钟配置 st-link提供8M的mco输出&#xff0c;所以配置hse 8m&#xff0c;sysclk最高100M&#xff0c;设置如下&#xff1a; 配置LED 连接pa5&#xff0c;设…

机器学习-进化算法

进化算法 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;crossovermutation 进化策略&#xff08;Evolutionary Strategies&#xff0c;ES&#xff09;基因编程&#xff08;Genetic Programming&#xff09;Multi-objective Evolutionary Algorithms 遗传算…

certbot 申请免费SSL证书、自动续期

简介 Certbot是一个免费、开源的软件&#xff0c;是Let’s Encrypt的客户端&#xff0c;Let’s Encrypt是证书颁发机构&#xff0c;它们之间使用ACME协议通信&#xff0c;Certbot是Lets Encrypt众多客户端的其中之一&#xff0c;Let’s Encrypt官网推荐CertBot&#xff0c;它能…

AIGC:关于人工智能的那些事

文章目录 前言人工智能发展史起步阶段&#xff1a;20世纪50年代至70年代知识工程阶段&#xff1a;20世纪80年代至90年代数据驱动阶段&#xff1a;2000年至今 人工智能包括哪些技术学习人工智能需要掌握的知识如何开发一个人工智能系统如何开发一个人脸识别系统人工智能未来发展…

mysql密码登录失败、服务启动失败和1045-Access denied for user ‘root‘@‘localhost‘

一、问题&#xff1a; 1.打开 navicate&#xff0c;双击localhost_3306&#xff0c;出现报错2002 - Can’t connect to server on ‘localhost’(10061) 2.查看mysql是否启动 控制面板——管理工具——服务 找到mysql服务&#xff0c;发现无法启动。 3.winR运行cmd&#xf…

windows install pandoc

文章目录 下载安装测试使用 下载 https://github.com/jgm/pandoc/releases 安装 pandoc-3.1.3-windows-x86_64.msi 直接双击一路默认即可。 但安装后并没有得到该命令&#xff0c;我们需要配置环境变量&#xff0c;找到安装的命令位置 C:\Users\XH\AppData\Local\Pandoc\p…

驱动多文件编译和驱动命令行传参

目录 1. 驱动的多文件编译 1.1. 准备两个文件 1.2. 修改Makefile文件 1.3. 执行Make命令生成.ko文件 2. 驱动模块传递参数 2.1. 传递一个参数 2.1.1. 函数原型分析 2.1.2. 撰写.c文件 2.1.3. 撰写makefile 2.1.4. 编译makefile并验证 2.2. 传递多个参数并使用modeinf…

线程的创建和使用(二)

1、线程的类和方法 Thread类是JVM用来管理线程的一个类&#xff0c;换句话说&#xff0c;每个线程都有唯一一个的Thread对象与之关联。 1.1、Thread的常见方法 方法说明Thread()创建线程对象Thread(Runnable target)使用Runnable对象创建线程对象Thread(String name)创建线程…

【SpringCloud-5】gateway网关

网关是干啥用的就不用再说了。 sringcloud中的网关&#xff0c;第一代是zuul&#xff0c;但是性能比较差&#xff08;1.x是阻塞式的&#xff0c;2.x是基于Netty的&#xff09;&#xff0c;然后有了第二代GateWay&#xff0c;基于Reactor模型 异步非阻塞。 springcloud网关就是一…

经理的工作岗位职责描述10篇

经理的工作岗位职责描述&#xff08;篇1&#xff09; 1、销售工具的开发和制作 2、负责各类媒体、渠道的软文撰写&#xff0c;产品信息推广; 3、筹办重点客户&#xff0c;潜在客户的讲座论坛会议; 4、市场推广活动&#xff1a;展会seminar oadshow等活动 5、产品上市沟通&#…

IIC协议通信解析,内附完整代码。

一&#xff1a;硬件接口 1.1&#xff1a;功能引脚 1.2&#xff1a;IIC总线通信注意事项 二&#xff1a;通信协议 &#xff08;1&#xff09;空闲状态&#xff1a; &#xff08;2&#xff09;起始位&#xff1a; &#xff08;3&#xff09;有效数据位 &#xff08;4&#x…

最近跳槽,压力真大...

前几天&#xff0c;跟个老朋友吃饭&#xff0c;他最近想跳槽去大厂&#xff0c;觉得压力很大&#xff0c;问我能不能分享些所谓的经验套路。 每次有这类请求&#xff0c;都觉得有些有趣&#xff0c;不知道你发现没有大家身边真的有很多人不知道怎么面试&#xff0c;也不知道怎…

【玩转Docker小鲸鱼叭】MacOS系统配置Docker镜像加速器

当我们通过 docker pull拉取镜像时&#xff0c;如果不指定仓库&#xff0c;默认从 Docker Hub &#xff08;docker.io&#xff09;获取镜像&#xff0c;而国内用户访问Docker Hub仓库时&#xff0c;通常速度很忙&#xff0c;经常超时导致拉取镜像失败&#xff0c;所以通常要通过…

上海亚商投顾:沪指震荡调整 CPO概念股持续大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日震荡调整&#xff0c;保险等权重板块走低&#xff0c;上证50跌超1.5%&#xff0c;创业板指较为抗跌。CPO、…

【新固态格式化】

新固态格式化 初始化硬盘 从管理进入磁盘管理 Windows 7及其以后的系统建议使用GPT MBR 是 Master Boot Record 的缩写&#xff0c;是一种传统而常用的磁盘布局。GPT 是 Globally Unique Identifier Partition Table 的缩写&#xff0c;是一种与 UEFI 相关的新磁盘布局。其…

Day23 实战篇 ——Jmeter压力测试实战

Day23 实战篇 ——Jmeter压力测试实战 文章目录 Day23 实战篇 ——Jmeter压力测试实战一、分布式压测原理二、分布式环境配置Slaves机器配置Master机器配置参数化文件配置三、分布式压测执行Slave机器执行Master机器执行四、常见问题处理问题一问题二问题三问题四项目中使用Jme…

redis缓存设计-Redis(八)

上篇文章介绍了redis缓存设计&#xff0c;热点key&#xff0c;bigkey注意事项。 原创 redis缓存设计-Redis&#xff08;七&#xff09;https://blog.csdn.net/ke1ying/article/details/131268967 命令使用 hgetall&#xff0c;lrange&#xff0c;smembers&#xff0c;zrange…

【初识Linux】——01Linux系统

目录索引 Linux介绍&#xff1a;Linux历史&#xff1a;Linux系统应用&#xff1a;*服务器系统&#xff1a;**嵌入式系统&#xff1a;**桌面应用系统&#xff1a;**版本&#xff1a;* Linux系统的安装&#xff1a;虚拟机&#xff1a;安装VMware&#xff1a;安装centOS操作系统&a…