代码随想录Day34 LeetCode T343整数拆分 T96 不同的二叉搜索树

news2025/2/25 12:14:01

目录

前言

LeetCode T343 整数拆分

题目思路:

第一步:确定递归数组含义

第三步:初始化dp数组(其实也是为接下来的递推做准备)

第四步:确定遍历顺序(很多情况下是对遍历顺序有要求的)

第五步:打印dp数组(如果遇到错误可以打印一下dp数组看看和我们推理的dp数组有啥不同,错在哪里了,更好的解决问题)

题目代码:

LeetCode T96 不同的二叉搜索树

题目思路:

第一步:确定递归数组含义(分析好含义才能解决的更透彻)

第二步:确定dp数组的递推公式(其实很多情况下有了递推公式才知道怎么初始化值)

第三步:初始化dp数组(其实也是为接下来的递推做准备)

第四步:确定遍历顺序(很多情况下是对遍历顺序有要求的)

第五步:打印dp数组(如果遇到错误可以打印一下dp数组看看和我们推理的dp数组有啥不同,错在哪里了,更好的解决问题)

题目代码:


前言

让我们回归思考一下贪心算法的动规五部曲

第一步:确定递归数组含义(分析好含义才能解决的更透彻)

第二步:确定dp数组的递推公式(其实很多情况下有了递推公式才知道怎么初始化值)

第三步:初始化dp数组(其实也是为接下来的递推做准备)

第四步:确定遍历顺序(很多情况下是对遍历顺序有要求的)

第五步:打印dp数组(如果遇到错误可以打印一下dp数组看看和我们推理的dp数组有啥不同,错在哪里了,更好的解决问题)

LeetCode T343 整数拆分

题目链接:343. 整数拆分 - 力扣(LeetCode)

题目思路:

这里我们知道一个大于等于2的数字可以拆分,我们可以想到首先它可以拆成两个数字,这里我们固定第一个数字,让第二个数字继续拆分

我们用3和4举例

第一步:确定递归数组含义

dp[i]就表示目前i这个数字可以拆分成的最大值

第二步:确定dp数组的递推公式(其实很多情况下有了递推公式才知道怎么初始化值)

我们发现递推公式其实就是求横向和竖向的最大值,公式如下

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

第三步:初始化dp数组(其实也是为接下来的递推做准备)

首先dp[0]和dp[1]是没有意义的,因为0和1无法分解

dp[2] = 1,因为2可以分为1和1,是最小的两个数

dp一定要初始化为n+1大小的

第四步:确定遍历顺序(很多情况下是对遍历顺序有要求的)

这里因为想知道dp[i]就得知道前面的dp[i-1]等,所以一定是从前往后遍历

注意这里有个小优化,因为我们知道一定是几个相同或接近的值是最大的,比如10里面两个数字相乘一定是5*5最大,所以我们j直接取得i/2即可

第五步:打印dp数组(如果遇到错误可以打印一下dp数组看看和我们推理的dp数组有啥不同,错在哪里了,更好的解决问题)

 

题目代码:

class Solution {
    public int integerBreak(int n) {
        //dp数组的含义,拆解n得到的最大乘积
        int[] dp = new int[n+1];
        dp[2] = 1;
        for(int i = 3;i<=n;i++){
            for(int j = 1;j<=i/2;j++){
                dp[i] = Math.max(dp[i],Math.max(j*(i-j),j*dp[i-j]));
            }
        }
        return dp[n];
    
    }
}

LeetCode T96 不同的二叉搜索树

题目链接:96. 不同的二叉搜索树 - 力扣(LeetCode)

题目思路:

这题我们发现n取3的时候,这个二叉树的左子树的形态和右子树的形态和n取2的时候是一样的,这时候我们就想到了动规

第一步:确定递归数组含义(分析好含义才能解决的更透彻)

dp[i]表示n取i时,这种不同二叉搜索树的个数

第二步:确定dp数组的递推公式(其实很多情况下有了递推公式才知道怎么初始化值)

dp[i]的值就是左子树可能的方法数*右子树可能的方法数的累加

为什么是乘法而不是加法呢?

举例:加入n取10,左子树有6种不同的取法,右子树有10种,这里肯定是左子树任取一种来对应右子树任取一种的方法(以上的6和10是瞎编的,仅供举例说明)

第三步:初始化dp数组(其实也是为接下来的递推做准备)

dp[0] = 1;
//0个节点,既是完全二叉树,又是满二叉树,同样也是二叉搜索树
dp[1] = 1;

第四步:确定遍历顺序(很多情况下是对遍历顺序有要求的)

同样是从前向后遍历,因为后面的元素依赖前面的元素产生

第五步:打印dp数组(如果遇到错误可以打印一下dp数组看看和我们推理的dp数组有啥不同,错在哪里了,更好的解决问题)

题目代码:

class Solution {
    public int numTrees(int n) {
        int[] dp = new int[n+1];
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 2;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/1158884.html

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

相关文章

0基础学习PyFlink——使用DataStream进行字数统计

大纲 sourceMapSplittingMapping ReduceKeyingReducing 完整代码结构参考资料 在《0基础学习PyFlink——模拟Hadoop流程》一文中&#xff0c;我们看到Hadoop在处理大数据时的MapReduce过程。 本节介绍的DataStream API&#xff0c;则使用了类似的结构。 source 为了方便&…

OSPF高级特性

OSPF高级特性(1) 一、OSPF不规则区域类型 产生原因&#xff1a;区域划分不合理&#xff0c;导致的问题 1、非骨干区域无法和骨干区域保持连通 2、骨干区域被分割 造成后果&#xff1a;非骨干区域没和骨干区域相连&#xff0c;导致ABR将不会帮忙转发区域间的路由信息。非骨干区…

MS3142电机驱动器可兼容LV8548M

MS3142/MS3142S 是一个双全桥电机驱动。可兼容LV8548M&#xff08;功能基本一致&#xff0c;管脚不兼容&#xff09;。电源电压供电范围 4V 到 18V&#xff0c;平均电流 1.1A&#xff0c;电流峰值 1.54A。如果需要更高的电流能力&#xff0c;可以将双全桥并联使用。 四个输入脚…

数据结构预算法--顺序表

1.顺序表 1.1概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组上完成数据的增删查改。 顺序表一般可以分为&#xff1a; 1. 静态顺序表&#xff1a;使用定长数组存储元素。 2. 动态顺序表&#xff1a;使…

Shiro 身份验证绕过 (CVE-2020-13933)

一、漏洞描述 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。 Apache Shiro身份验证绕过漏洞CVE-2020-11989的修复补丁存在缺陷&#xff0c;在1.5.3及其之前的版本&#xff0c;由于shiro在处理url时与spring仍然存在差异&#xff0c;依然存…

Day42 力扣动态规划 :123.买卖股票的最佳时机III |188.买卖股票的最佳时机IV

Day42 力扣动态规划 :123.买卖股票的最佳时机III &#xff5c;188.买卖股票的最佳时机IV 123.买卖股票的最佳时机III第一印象看完题解的思路dp数组&#xff1a;递推公式&#xff1a;初始化遍历顺序 实现中的困难感悟代码 188.买卖股票的最佳时机IV第一印象初始化递推公式看完题…

黄金矿工小游戏

欢迎来到程序小院 黄金矿工 玩法&#xff1a;点击开始游戏&#xff0c;黄金和钩子&#xff0c;钩子会左右摆动&#xff0c;对准黄金位置点击鼠标左键钓起黄金加对应时间&#xff0c;钓起黑色四块减去响应时间&#xff0c;快去挖矿吧^^。开始游戏https://www.ormcc.com/play/ga…

【错误解决方案】Error: module ‘cv2‘ has no attribute ‘SURF‘

1. 错误提示 python-opencv高版本中&#xff0c;AttributeError: module cv2 has no attribute SURF问题&#xff1b; 错误提示&#xff1a;Error: module ‘cv2‘ has no attribute ‘SURF‘ 2. 解决方案 解决&#xff1a;将sift cv2.SIFT()替换为&#xff1a;sift cv2.x…

windows内存取证-中等难度-下篇

上文我们对第一台Target机器进行内存取证&#xff0c;今天我们继续往下学习&#xff0c;内存镜像请从上篇获取&#xff0c;这里不再进行赘述​ Gideon 攻击者访问了“Gideon”&#xff0c;他们向AllSafeCyberSec域控制器窃取文件,他们使用的密码是什么&#xff1f; 攻击者执…

day57--动态规划15

392.判断子序列 115.不同的子序列 第一题&#xff1a;判断子序列 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&…

大模型冷思考:企业“可控”价值创造空间还有多少?

文 | 智能相对论 作者 | 叶远风 毫无疑问&#xff0c;大模型热潮正一浪高过一浪。 在发展进程上&#xff0c;从最开始的技术比拼到现在已开始全面强调商业价值变现&#xff0c;百度、科大讯飞等厂商都喊出类似“不能落地的大模型没有意义”等口号。 在模型类型上&#xff0…

2023年【高压电工】考试及高压电工找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高压电工考试参考答案及高压电工考试试题解析是安全生产模拟考试一点通题库老师及高压电工操作证已考过的学员汇总&#xff0c;相对有效帮助高压电工找解析学员顺利通过考试。 1、【单选题】 额定容量是指:在变压器铭…

Spring源码分析篇:@Autowired 是怎样完成注入的?究竟是byType还是byName亦两者皆有

1. 五种不同场景下 Autowired 的使用 第一种情况 上下文中只有一个同类型的bean 配置类 package org.example.bean; ​ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; ​ Configuration public class…

docker-compose 简单部署MySQL Database

docker-compose 简单部署MySQL Database 本博文部署MySQL 并与上篇部署的 Flask进行关联 主博客目录&#xff1a;《从零开始学习搭建量化平台笔记》 文章目录 docker-compose 简单部署MySQL Database部署 MySQLMySQL 开放端口与权限 主项目计划需要搭建一个MySQL 数据库为其他部…

“零基础”PHP代码审计入门

目录 一、代码审计目的 二、代码审计基础 三、 代码审计思路 四、PHP核心配置 五、 代码审计环境 六、手动调试代码 七、PHP的弱类型 八、学习漏洞函数 九、审计入门总结 推荐一些demo&#xff1a; 一、代码审计目的 代码审计指的是对源代码进行检查&#xff0c;寻找…

智慧校园地下管线三维可视化管控平台减少人力和物力资源的浪费

随着科技的不断发展&#xff0c;三维可视化管理平台在各个领域得到了广泛的应用。三维可视化管理平台通过将数据以三维形式呈现&#xff0c;使得用户能够更直观地理解和分析数据&#xff0c;从而提高工作效率和决策质量。 VR数字孪生园区系统是通过将实际园区的各种数据和信息进…

开关电源老化试验和性能检测系统软件

开关电源自动测试系统由PC(工控机)、测试工装、可编程直流电源、数字示波器、可编程直流电子负载、继电器模块等部分组成&#xff0c;并通过RS232/LAN通讯总线、测试夹具以及其它线缆等进行连接&#xff0c;为系统组成结构。PC与可编程直流电源、数字示波器、可编程直流电子负载…

c++装饰器模式

前言 装饰器模式&#xff0c;就是可以对一个对象无限装饰一些东西&#xff0c;而且可以没有顺序。比如一个人可能只会说出他的名字&#xff0c;但是可以让他再说哈哈&#xff0c;可以说完哈哈之后再说哇哇。如何后面又不想装饰了&#xff0c;不需要改类原来的代码&#xff0c;…

什么是数字展览馆,数字展览馆有什么应用前景

引言&#xff1a; 数字展览馆作为一种新兴的文化艺术展示形式&#xff0c;以数字化技术和虚拟现实为基础&#xff0c;正在逐渐改变传统展览的方式。 一、什么是数字展览馆&#xff1f; 1.定义 数字展览馆是利用数字技术和虚拟现实技术打造的一种线上文化艺术展示平台。通过虚…

基于springboot实现疫情防控期间外出务工人员信息管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot疫情防控期间外出务工人员信息管理系统 摘要 网络的广泛应用给生活带来了十分的便利。所以把疫情防控期间某村外出务工人员信息管理与现在网络相结合&#xff0c;利用java技术建设疫情防控期间某村外出务工人员信息管理系统&#xff0c;实现疫情防控期间某村外出…