代码随想录刷题记录day36 整数拆分+不同的二叉搜索树

news2024/11/24 13:05:54

代码随想录刷题记录day36 整数拆分+不同的二叉搜索树

参考:代码随想录

343. 整数拆分

在这里插入图片描述

思想

一个数可以被拆分成2个数或者3个及以上的数。

dp[i]表示拆分i以后,得到的最大的乘积

拆分成两个数 j和i-j,拆分成三个数及以上 j 和dp[i-j],dp[i-j]表示继续拆分i-j 得到的最大的成绩

那么只要遍历j,就能把所有的拆分情况都给包含进来。

在某一轮遍历中

dp[i]=max(i*(i-j),j*dp[i-j])

由于j是遍历了每一种情况,所以dp[i]还是要取最大值的

代码

public int integerBreak(int n) {
        //dp[i]: 表示把i拆分得到的最大的乘积
        //dp[i] 可以从两个方向计算而来
        // 1. 遍历j dp【i】=j*dp【i-j】 把i拆分成2个以上
        //2.   遍历j dp【i】=j*(i-j) 就把i拆分成两个
        //dp[i]=max(dp【i】=j*dp【i-j】,dp【i】=j*(i-j))

        //所以递推公式:dp[i] = max({dp[i], (i - j) * j, dp[i - j] * j});
        //
        //那么在取最大值的时候,为什么还要比较dp[i]呢?
        //
        //因为在递推公式推导的过程中,每次计算dp[i],取最大的而已。>>>>>???????
        //还要再取一次max  因为j是循环了  j取一个值 只是得到了dp【i】的一种可能

        int[] dp=new int[n+1];
        dp[2]=1;//把2 拆分的最大乘积是1

        //todo 遍历顺序
        //确定遍历顺序,先来看看递归公式:dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));
        //
        //dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历,先有dp[i - j]再有dp[i]。
        //
        //枚举j的时候,是从1开始的。i是从3开始,这样dp[i - j]就是dp[2]正好可以通过我们初始化的数值求出来。
        //
        //所以遍历顺序为:
        for (int i = 3; i <= n; i++) {
            for (int j = 1; j < i-1; j++) {
                dp[i]=Math.max(dp[i],Math.max(j*(i-j),j*dp[i-j]));
            }
        }
        return dp[n];
    }

96. 不同的二叉搜索树

在这里插入图片描述

思想

1.dp[i]的含义,表示以1到i为头节点的个数,或者说有i个元素的二叉搜索树的数量

dp[3]=以1为头节点的数量+以2为头节点的数量+以3为头节点的数量

以1为头节点的数量=右子树2个元素的搜索树的数量*左子树0个元素的搜索树的数量=dp[2]*dp[0]

以2为头节点的数量=右子树1个元素的搜索树的数量*左子树1个元素的搜索树的数量=dp[1]*dp[1]

以3为头节点的数量=右子树0个元素的搜索树的数量*左子树2个元素的搜索树的数量=dp[0]*dp[2]

2.递推公式

dp[i]+=dp[i-j]*dp[j-1],其中j从1开始遍历,以j为头节点,那么左子树的节点数量就有j-1个,右子树的节点数量有i-j个

比如i=3,j=1时,左子树0个节点,右子树2个节点

3.初始化

0个节点也算是一种情况,dp[0]=1

4.遍历顺序

节点数为i的状态是依靠i之前的节点数的状态的,所以从前往后遍历

代码

class Solution {
    public int numTrees(int n) {
        //1.dp[i]的含义,表示以1到i为头节点的个数,或者说有i个元素的二叉搜索树的数量
        //dp[3]=以1为头节点的数量+以2为头节点的数量+以3为头节点的数量
        //以1为头节点的数量=右子树2个元素的搜索树的数量*左子树0个元素的搜索树的数量=dp[2]*dp[0]
        //以2为头节点的数量=右子树1个元素的搜索树的数量*左子树1个元素的搜索树的数量=dp[1]*dp[1]
        //以3为头节点的数量=右子树0个元素的搜索树的数量*左子树2个元素的搜索树的数量=dp[0]*dp[2]

        //递推公式 
        //dp[i]+=dp[i-j]*dp[j-1],其中j从1开始遍历,以j为头节点,那么左子树的节点数量就有j-1个,右子树的节点数量有i-j个
        //比如i=3,j=1时,左子树0个节点,右子树2个节点

        int [] dp=new int[n+1];
        //初始化
        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];
            }
            //System.out.println(dp[i]);
        }

        return dp[n];
    }
}

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

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

相关文章

面试10分钟就完事了,问的实在是太...

干了两年外包&#xff0c;本来想出来正儿八经找个互联网公司上班&#xff0c;没想到算法死在另一家厂子。 自从加入这家外包公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到11月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资…

【矩阵乘法】C++实现外部矩阵乘法

问题描述 ​ 使用文件和内存模拟系统缓存&#xff0c;并利用矩阵乘法验证实际和理论情况。 算法思想 设计一个Matrix类&#xff0c;其中Matrix是存在磁盘中的一个二进制文件&#xff0c;类通过保存的矩阵属性来读取磁盘。前八个字节为两个int32&#xff0c;保存矩阵的行列数…

Linux||报错:vboxuser is not in the sudoers file. This incident will be reported.

一、问题描述 打算在Ubuntu虚拟机上部署SonarQube时&#xff0c;为避免各种不必要的奇怪问题&#xff0c;预先使用sudo命令修改系统参数。 命令如下&#xff1a;sudo sysctl -w vm.max_map_count262144 报错如下&#xff1a;vboxuser is not in the sudoers file. This inciden…

制造业企业库存管理的现状与解决措施

在竞争激烈的现代经济时代&#xff0c;制造行业面临着巨大的挑战和压力&#xff0c;必须与时俱进&#xff0c;适应市场的各种变化才能生存并保持活力。随着经营模式的变化与产品数量的增加&#xff0c;对产品库存管理也提出更大的挑战。库存管理是指与库存相关的计划和控制活动…

数据库设计 Relational Language

除了最为常用的SQL语句之外&#xff0c;还存在着几种不常用的数据库语言&#xff0c;这里简单介绍&#xff0c;了解即可。 Relational Algebra(RA) 一种程序性语言&#xff0c;可以与SQL对应着转换&#xff0c;语法即转换规则如下&#xff1a; σ&#xff1a;与WHERE对应&am…

一篇文章让你搞懂各种压缩,gzip压缩,nginx的gzip压缩,Minification压缩

前言 同学们可能听过这些压缩&#xff0c;但是可能不是了解&#xff0c;这篇文章让你弄清他们 webpack的gzip压缩和nginx的gzip压缩有什么区别&#xff1f;怎样开启gzip压缩&#xff1f;Minfication压缩又是什么鬼&#xff1f;怎样使项目优化的更好&#xff1f;本篇文章讲的是…

DBCO点击试剂1629057-08-4,DBCO-C3-Maleimide,DBCO-C3-Mal

一、基础产品数据&#xff08;Basic Product Data&#xff09;&#xff1a; CAS号&#xff1a;1629057-08-4 中文名&#xff1a;二苯基环辛炔-C3-马来酰亚胺、二苯并环辛炔-C3-马来酰亚胺 英文名&#xff1a;DBCO-C3-Maleimide&#xff0c;DBCO-C3-Mal 结构式&#xff08;Struc…

MAC 通过IDEA启动tomcat,显示80端口被占用解决办法

mac系统下使用IntelliJ IDEA中的Tomcat报错问题&#xff1a;Address localhost:80 is already in use 一、状况描述 本人在跑一个tomcat的项目时&#xff0c;由于项目限制了用域名访问&#xff0c;为了方便本地开发调试&#xff0c;需在tomcat在IDEA中将端口设置为80&#xff…

three.js问题记录---MeshLambertMaterial材质颜色失效

初学three.js&#xff0c;跟着教程走都比较顺利&#xff0c;自己尝试写个demo的时候发现创建一个物体&#xff0c;在给材质颜色的时候出现了一个问题。 在three.js官网文档&#xff08;https://www.techbrood.com/threejs/docs/&#xff09;中&#xff0c;我们可以看到材料&am…

论文解读-Early Detection of Cybersecurity Threats Using Collaborative Cognition

1 概述与介绍 作者描述了一种新颖的协作框架&#xff0c;该框架通过利用语义丰富的知识表示和与不同机器学习技术集成的推理功能来协助安全分析人员。文中介绍的认知网络安全系统从各种文本源中提取信息&#xff0c;并使用一种扩展的UCO安全本体的将其存储在知识图谱中。该系统…

[附源码]Python计算机毕业设计SSM家庭安防系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

一个ubuntu系统搭建redis集群

下载redis(如果要搭建redis集群不建议使用命令下载&#xff0c;因为后面启动集群时redis5.0一下的会有问题&#xff0c;依赖ruby) 更新apt sudo apt update使用apt下载 sudo apt install redis-server打开redis配置文件 sudo vim /etc/redis/redis.conf设置远程连接&#x…

2023年tiktok自动化运营软件新排名看这里!

【导读】2022年即将结束啦&#xff0c;你的tiktok运营效果怎么样呢&#xff1f;这里我们小编告诉您&#xff0c;用tiktok自动化运营软件可以取得事半功倍的效果哦&#xff01;这里就带大家看看2023年tiktok自动化运营软件排名哦&#xff01; 2023年tiktok自动化运营软件新排名看…

FPGA学习笔记(九)SPI学习总结及stm32的HAL库下SPI配置

系列文章目录 一、FPGA学习笔记&#xff08;一&#xff09;入门背景、软件及时钟约束 二、FPGA学习笔记&#xff08;二&#xff09;Verilog语法初步学习(语法篇1) 三、FPGA学习笔记&#xff08;三&#xff09; 流水灯入门FPGA设计流程 四、FPGA学习笔记&#xff08;四&…

上海亚商投顾:沪指继续震荡向上 零售等消费股表现活跃

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪三大指数今日低开高走&#xff0c;深成指盘中涨超1%&#xff0c;创业板指一度涨逾1.5%&#xff0c;随后均上演冲高回…

【C++进阶】引用 函数提高

文章目录一 、引用1.1 引用的基本使用1.2 引用的注意事项1.3 引用做函数参数1.4 引用的本质 &#xff1a;指针的常量1.5 常量引用二、函数提高1 函数默认参数2 函数占位参数3 函数重载一 、引用 1.1 引用的基本使用 作用&#xff1a;给变量起别名 语法&#xff1a;数据类型 &a…

Python计算目标检测中的IoU

Python计算目标检测中的IoU前言前提条件相关介绍实验环境IoU概念代码实现前言 本文是个人使用PythonPython处理文件的电子笔记&#xff0c;由于水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入我的个人主页查看 前提条件 熟悉P…

​寒武纪思元370系列与飞桨完成II级兼容性测试,联合赋能AI落地实践

2022年12月2日&#xff0c;寒武纪思元370系列与飞桨已完成II级兼容性测试&#xff0c;兼容性表现良好。 本次II级兼容性测试基于寒武纪MLU370系列&#xff0c;测试了包含PP-YOLO、YOLOv3、ResNet50、DeepLabv3、BERT、OCR-DB等共计15个模型的验证&#xff0c;覆盖了计算机视觉…

01-go基础-07-map(声明map、初始化map、map赋值、遍历map、判断key是否在map中、删除map成员)

文章目录1. 声明 map2. 初始化 map3. map赋值3.1 直接声明并赋值3.2 分别定义每一组键值对4. 遍历map5. 判断key是否在map中6. 删除成员&#xff08;delete()&#xff09;1. 声明 map 语法 var MapName map[keyType]valueType语法示例 var warlords map[string]string仅声明…

Eureka 服务端搭建入门与集群搭建

前言 Eureka在2022年已经确定的是&#xff0c;2.x版本开源计划已经停止了&#xff0c;1.x版本陆陆续续还是有人在维护的。还有很多最早使用微服务的公司还在继续用着eureka作为注册中心&#xff0c;也是很多同学学习微服务的敲门砖。 搭建Eureka服务端 创建一个平平无奇的ma…