代码随想录刷题|LeetCode 343. 整数拆分 96.不同的二叉搜索树

news2024/10/6 6:42:51

目录

343. 整数拆分

思路

整数拆分

96.不同的二叉搜索树

思路

不同的二叉搜索树


343. 整数拆分

题目链接:力扣

思路

        动态规划的题目虽然说是要先确定dp数组的含义,再确定递归公式,但是总感觉这两者是相辅相成的,是一起出来的,但是到此,dp数组代表的都是我们要求取的值

1、确定dp数组以及下标的含义

        i 代表dp数组的下标和 要被拆分的数字
        dp[i] 代表数字 i ,被拆分后相乘可以得到的最大值

2、确定递推公式

        获取递归公式要推导清楚,dp[i] 是怎么来的

        比如,现在的数字是10,进行拆分
        【1,9】【2,8】【3,7】【4,6】【5,5】后面的都会和前面重复,所以拆到5就可以了
        那么其实从 1 遍历,就可以获得dp[i] 可以通过 j * (i - j)进行获取

        还有就是后面得到的这个数组还可以进行拆分,比如【9、8、7、6、5】,这里就可以借助dp[]数组前面的元素了【9的拆分、8的拆分、7的拆分、6的拆分、5的拆分】,其实就是dp[9]、dp[8]、dp[7]……加一句:从这里也可以看到一点就是,遍历顺序应该是从前先后的,因为后面的拆分要使用前面数字的结果
        所以dp[i] 还可以通过 j * dp[i - j]进行获取

        总的来说 dp[i] = Math.max(dp[i] , j * (i - j) , j * dp[i - j]);

3、dp数组初始化

        对于初始化数组来说,dp[0],dp[1] 严格意义上来说,0 和 1 是不可拆分的,他们拆分后的最大值是不存在的

        2是可以进行拆分成 1 和 1 的。所以赋值为1

4、确定遍历顺序

        从前向后遍历

        其中的 j 其实最大值为 i-j ,再大只不过是重复而已
        并且本题中的 dp[0] , dp[1] 都是无意义的,j 最大值到达 i-j 。就不会用到 dp[0] 和 dp[1]

         j * (i - j) 是单纯的把整数 i 拆分为两个数 也就是 i,i-j ,再相乘
         而j * dp[i - j]是将 i 拆分成两个以及两个以上的个数,再相乘

5、打印dp数组

 

整数拆分

class Solution {
    public int integerBreak(int n) {

        // 创建dp数组
        int[] dp = new int[n + 1];

        // 初始化数组
        dp[2] = 1;

        // 填充dp[]数组
        for (int i = 3; i <= n; i++) {
            for (int j = 1; j <= i - j; j++) {
                dp[i] = Math.max(dp[i],Math.max( j * (i - j) , j * dp[i - j]));
            }
        }

        return dp[n];
    }
}

96.不同的二叉搜索树

题目链接:力扣

思路

        这道题目发现递推公式真的是太难了

1、定义dp[] 数组

        dp[i] 代表,由 i 个节点组成且节点值从 1 到 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[0]就可以了,推导的基础,都是dp[0]
        初始化dp[0] = 1

4、遍历顺序

        从小到大遍历

5、打印dp数组

不同的二叉搜索树

class Solution {
    public int numTrees(int n) {

        // 定义dp[]数组
        int[] dp = new int[n + 1];

        // 初始化dp数组
        dp[0] = 1;
        
        // 填充dp数组
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                dp[i] += dp[j - 1] * dp[i - j];
            }

        }

        return dp[n];
    }
}

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

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

相关文章

[附源码]java毕业设计校园飞毛腿系统

项目运行 环境配置&#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…

【三维点云】2-三维点云表征

文章目录内容概要1 三维数据的获取方式及原理1.1 被动测量单目立体视觉双目立体视觉多目立体视觉1.2 主动测量结构光3D成像TOF 3D成像脉冲法相位法2 三维数据的获取原理立体视觉测量法相机成像模型小孔成像模型&#xff08;相机成像模型的理想情况&#xff09;单目立体视觉聚焦…

[附源码]计算机毕业设计JAVA基于web的球类体育馆预定系统

[附源码]计算机毕业设计JAVA基于web的球类体育馆预定系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; …

SPARKSQL3.0-SessionState构建源码剖析

一、介绍 Apache Spark 2.0引入了SparkSession&#xff0c;其目的是为用户提供了一个统一的切入点来使用Spark的各项功能&#xff0c;不再需要显式地创建SparkConf, SparkContext 以及 SQLContext&#xff0c;因为这些对象已经封装在SparkSession中。此外SparkSession允许用户…

字节跳动提出KVM内核热升级方案,效率提升5.25倍!

背景 作为云计算最重要的底层基础之一&#xff0c;KVM 虚拟化软件在现代的数据中心中应用非常广泛。基于 KVM 的 hypervisor 包括了构成宿主机的软硬件&#xff0c;共同为虚拟机中的应用程序提供高性能的 CPU、内存和 IO 设备等资源。在大规模部署的生产环境中&#xff0c;作为…

周年更名,元宇宙产业委再上新台阶

今天&#xff0c;2022年11月10日&#xff0c;全球元宇宙大会在鹏城隆重举行&#xff0c;这个日子也是中国移动通信联合会元宇宙产业工作委员会成立一周年的日子。会上&#xff0c;我们宣布了这个更名消息&#xff0c;这也是元宇宙产业工作委员会迈上一个新台阶的标志。有20多家…

ES学习笔记

01:REST 指的是客户端和服务器之间的交互在请求之间是无状态的,从客户端到服务器的每个请求都必须包含理解请求所必须的信息,同时在请求之间的任意间隔时间点,若服务器重启,那么客户端是得不到相应的通知的.所以无状态的请求可以由任何可用的服务器回答. 在REST样式的Web服务中…

LeetCode 42.接雨水

这篇记录一下刷接雨水这道题的过程&#xff0c;日后回顾 目录 法1&#xff1a; 法2&#xff1a; 法3&#xff1a; 法4&#xff1a; 法5&#xff1a; 务必掌握123 写这道题要知道雨水怎么算。核心就是要算当前列雨水的高度就要取决于这列左右两侧比自己搞得柱子中较矮的那…

【26-业务开发-基础业务-品牌管理-图片管理-上传图片功能实现-基于阿里云OSS服务-解决跨域问题-设置跨域规则-修改ACL权限为公共读】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

springmvc源码之Web上下文初始化

系列文章目录 springmvc源码之Web上下文初始化 文章目录系列文章目录Web上下文初始化ContextLoaderListenerinitWebApplicationContext初始化创建WebApplicationContext上下文Web上下文初始化 web上下文与SerlvetContext的生命周期应该是相同的&#xff0c;springmvc中的web上…

公众号免费查题

公众号免费查题 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xff09; 题…

Flink概念及应用场景

1、Flink实时应用场景 Flink在实时计算领域内的主要应用场景主要分为四类&#xff1a; 实时数据同步流式ETL实时数据分析复杂事件处理2、实时数据体系架构 实时数据体现大致分为三类场景&#xff1a; 流量类业务类特征类在数据模型上&#xff0c;流量类是扁平化的宽表&…

论文管理系统(用户列表显示功能)

上次我们已经实现了论文管理系登录功能,这次我们要实现登录之后的跳转到首页,并且让首页列表显示出数据库的信息并在Mapper中写入模糊查询功能语句,这次我们不使用MybatisPlus写这个功能,这次使用Mybatis来写,区别就是Plus是继承于<BaseDAO>Mapper,而Mybatis则是我们通过…

JAVASE(复习)——static

static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量 一、被static修饰的特点 被类的所有对象共享&#xff08;在堆内存共享&#xff09; 随着类的加载而加载&#xff0c;优先于对象存在&#xff08;就是你加载类的时候就加载了&#xff09; 可以通过…

@Transactional注解为何会失效

使用 Transactional 注解能保证方法内多个数据库操作要么同时成功、要么同时失败。但是有很多细节需要注意&#xff0c;不然Transactional可能会失效。 1.注解应用在非 public 的方法上 如果Transactional注解应用在非public 修饰的方法上&#xff0c;Transactional将会失效。…

FLink源码 1.13 3 种 命令客户端 Generic CLI 、 yarn-cluster、DefaultCLI使用

先说结论:对于三种Cli,Generic CLI mode、yarn-cluster mode、default mode,无法同时使用,源码使用顺序为Generic CLI mode优先判断,接着是 yarn-cluster mode ,最后是default mode,所以对于三种Cli的参数,不能混用,否则会出现命令不生效的情况,具体使用以及源码见下…

【滤波跟踪】基于matlab扩展卡尔曼滤波的无人机路径跟踪【含Matlab源码 2236期】

⛄一、EKF算法简介 扩展卡尔曼滤波是利用泰勒级数展开方法将非线性滤波问题转化成近似的线性滤波问题,利用线性滤波的理论求解非线性滤波问题的次优滤波算法。其系统的状态方程和量测方程分别如式(1)、式(2)所示: 式中,X(k)为n维的随机状态向量序列,Z(k)为n维的随机量测向量序…

Matlab 对连续时间信号的运算

Matlab 对连续时间信号的运算 1、连续时间系统零状态响应 题目&函数说明 连续时间系统的微分方程为 y"(t) 4y’(t) 3y(t) f’(t) 2f(t) 当 输入信号 f(t) 20e-2tu(t) 时&#xff0c;初始值 y(0-) 2, y’(0-) 1, 求系统的零状态响应 Matlab 库函数中的 lsim(…

GNN Tensorflow packages

tf framework定义 tf.name_scope()函数 tf.name_scope(name)&#xff0c;用于定义python op的上下文管理器。 此上下文管理器将推送名称范围&#xff0c;这将使其中添加的所有操作的名称带有前缀。 例如&#xff0c;定义一个新的Python op my_op&#xff1a; def my_op(a,…

scratch踢足球 电子学会图形化编程scratch等级考试一级真题和答案解析2022年9月

目录 scratch踢足球 一、题目要求 1、准备工作 2、功能实现 二、案例分析