代码随想录第四十三天|343. 整数拆分 ● 96.不同的二叉搜索树

343.整数拆分

题目:
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

示例 1:
输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:
输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
说明: 你可以假设 n 不小于 2 且不大于 58。
题目链接:343.整数拆分
解题思路:
dp是数字n拆分后的最大乘积
递推公式 首先拆成两个数字 数字j可以拆成i ,j-i i可以继续拆 所以可以在dp[i]j-i与in-i中取最值
i*dp[i-j] 将其拆为至少是三个数
代码如下:

/初始化dp数组明白含义 正整数n拆分后的最大乘积
//确定递推公式
//初始化 dp[2]=1;
//确定遍历
class Solution {public int integerBreak(int n) {//特殊情况if(n==1||n==0){return 0;}int dp[]=new int[n+1];//初始化dp[2]=1;for(int i=3;i<=n;i++){for(int j=1;j<i;j++){//j*i-j 将其拆为两个数//j*dp[i-j] 将其拆为至少是三个数//*** */dp[i] 保留拆数不同结果的最大数dp[i]=Math.max(dp[i],Math.max(j*(i-j),j*dp[i-j]));}}return dp[n];}
}

96.不同的二叉搜索树

题目:
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
在这里插入图片描述
输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1
代码如下:

//动规五部曲
//确定dp数组的含义 dp[i] 为 n=i时,不同搜索二叉树有多少种
//初始化 dp[0]=1 dp[1]=1 dp[2]=2
//遍历
//当n为3时,总数为头节点为1-3的个数的总和
//当头节点为1时,左边有0个子节点,右边有2个 个数=dp[0]*
//当头节点为2时,左边有1个子节点,右边有1个
//当头节点为3时,左边有2个子节点,右边有0个
class Solution {public int numTrees(int n) {int dp[]=new int[n+1];dp[0]=1;dp[1]=1;if(n <= 1){return dp[n];    }for(int temp=2;temp<=n;temp++){for(int i=0;i<temp;i++){dp[temp]+=dp[i]*dp[temp-1-i];}}return dp[n];}
}

进阶:
95. 不同的二叉搜索树 II
在这里插入图片描述

//动规解法
//dp数组的含义:dp[i]dp[i]dp[i]表示序列[1,2,3,...,i][1,2,3,...,i][1,2,3,...,i]能够形成的所有不同BST
//初始化:i=0 时为空树,i=1时为只有一个根节点1的树
class Solution {//深拷贝!!太精彩了TreeNode copyTree(TreeNode tmp,int j){if(tmp==null){return null;}TreeNode left=copyTree(tmp.left,j);TreeNode right=copyTree(tmp.right,j);TreeNode node=new TreeNode(tmp.val+j,left,right);return node;}public List<TreeNode> generateTrees(int n) {List<List<TreeNode>> dp=new ArrayList<>();ArrayList first=new ArrayList<>();first.add(null);dp.add(first);if(n>0){ArrayList second=new ArrayList<>();second.add(new TreeNode(1));dp.add(second);}for(int i=2;i<=n;i++){ArrayList res=new ArrayList<>();for(int j=1;j<=i;j++){//以j为中间结点的不同的右子树for(TreeNode right:dp.get(i-j)){TreeNode rchild=copyTree(right,j);for(TreeNode left:dp.get(j-1)){TreeNode root =new TreeNode(j);root.left=left;root.right=rchild;res.add(root);}}}dp.add(res);}return dp.get(dp.size()-1);}}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化学习 | 强化学习基础知识(图解)

强化学习是机器学习的一个领域。它是关于在特定情况下采取适当的行动来最大化奖励。它被各种软件和机器用来找到在特定情况下应该采取的最佳行为或路径。强化学习与监督学习的不同之处在于&#xff0c;在监督学习中&#xff0c;训练数据具有答案键&#xff0c;因此模型本身使用…

RabbitMQ从0到1完整学习笔记一:《基础篇》

目录 启篇 一、初识MQ 1.1 同步调用 1.2异步调用 1.3 技术选型 二、RabbitMQ 架构 2.2 收发消息 2.2.1 交换机 2.2.2 队列 2.2.3 绑定关系 2.2.4 发送消息 2.3 数据隔离 2.3.1 用户管理 2.3.2 virtual host 三、SpringAMQP 3.1 案例入门 3.1.1 导入依赖 3.1.2 消息发送 3.1.2 消…

图像识别-人脸识别与疲劳检测 - python opencv 计算机竞赛

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是…

threejs(2)-Geometry进阶详解

一、全面讲解UV与应用 在本节中&#xff0c;我们将讨论Three.js中的UV映射&#xff0c;包括UV映射的概念、与顶点位置的关系和区别以及如何在Geometry中设置UV坐标。我们将使用BufferGeometry进行示例说明。 颜色对应 什么是UV映射&#xff1f; UV映射是一种将二维纹理映…

Ubuntu系统如何进行网络连接-连接电脑局域网-物联网开发-Ubuntu系统维护

一、前言 在Ubuntu系统的维护中&#xff0c;我们常常需要对VMware中的Ubuntu虚拟机配置网络连接&#xff0c;以连接服务器下载或安装软件包以及进行网络通信等。 基于上述问题&#xff0c;本文将着重分享Ubuntu配置网络链接的若干方法。 二、网络连接模式 打开VM&#xff0c;右…

【Java 进阶篇】JavaScript 动态表格案例

在这篇博客中&#xff0c;我们将深入了解JavaScript如何创建和操作动态表格。我们将从头开始构建一个动态表格&#xff0c;并逐步添加各种功能&#xff0c;使其能够实现数据的添加、删除和编辑。这个示例将有助于理解如何在前端开发中使用JavaScript创建交互性强大的表格。 准…

网站如何优化加速,让网站降低延迟

优化网站架构 精简页面加载过程&#xff1a;通过消除冗余代码和不必要的图像&#xff0c;并采用CDN资源分发&#xff0c;以减少加载时间。 精心规划内容架构&#xff1a;通过使用恰当的标题和描述&#xff0c;使搜索引擎能够快速理解页面的内涵。 选择性能出众的前端框架&…

RT-Thread学习笔记(三):线程管理

线程管理 线程管理相关概念什么是时间片轮转调度器锁线程运行机制线程的五种状态 动态和静态创建线程区别动态和静态创建线程优缺点RT-Thread动态线程管理函数动态创建线程动态删除线程 RT-Thread静态线程管理函数静态创建线程 线程其他操作线程启动线程延时获得当前执行的线程…

Java并发面试题:(六)悲观锁和乐观锁和Java内存模型和CAS原理

悲观锁和乐观锁的区别 什么是悲观锁&#xff1f; 基本上我们理解的操作前对资源加锁&#xff0c;操作完后释放锁。说的都是悲观锁。悲观锁认为所有的资源都是不安全的&#xff0c;随时会被其他线程操作、更改。所以操作资源前一定要加一把锁、防止其他线程访问。 什么是乐观锁&…

【23种设计模式】装饰器模式

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

Excel·VBA单元格区域数据对比差异标记颜色

之前的一篇博客《ExcelVBA单元格重复值标记颜色》&#xff0c;是对重复的整行标记颜色 而本文是按行对比2个单元格区域的数据&#xff0c;并对有差异的区域&#xff08;一个单元格区域有的&#xff0c;而另一个单元格区域没有的&#xff09;标记颜色&#xff0c;且只要存在任意…

单链表经典OJ题:合并有序链表

目录 ​编辑 题目&#xff1a; 图例&#xff1a; 分析&#xff1a; 解法&#xff1a; 解法1: 解法2: 解法的对比&#xff1a; 解法2&#xff1a; 注意事项&#xff1a; 图例&#xff1a; 代码演示&#xff1a; 代码分析&#xff1a; 代码缺点&#xff1a; 重复…

[MySQL]BLOB/TEXT column ‘xxx‘ used in key specification without a key length

报错信息&#xff1a; SQLSTATE[42000]: Syntax error or access violation: 1170 BLOB/TEXT column xxx used in key specification without a key length 原因&#xff1a; MySQL的唯一索引不支持text类型的字段&#xff01;

C++初阶-类和对象(上)

类和对象&#xff08;上&#xff09; 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装访问限定符封装 五、类的作用域六、类的实例化七、类的对象大小的计算如何计算类对象的大小类对象的存储方式猜测 八、类成员函数的this指针this指针的引出…

网站如何才能不被黑,如何做好网络安全

当企业网站受到攻击时&#xff0c;首页文件可能被篡改&#xff0c;百度快照也可能被劫持并重定向到其他网站。首要任务是加强网站的安全防护。然而&#xff0c;许多企业缺乏建立完善的网站安全防护体系的知识。因此&#xff0c;需要专业的网站安全公司来提供相应的保护措施。今…

番外8.1 配置+管理文件系统

Task01: Linux 文件系统结构&#xff1b; 可以进行Linux操作系统的文件权限管理与方式切换&#xff0c;可以应用磁盘与文件权限管理工具&#xff1b; 01&#xff1a;常见文件系统类型&#xff08;Ext4[rhel6默认文件管理系统], 存储容量1 EB1073741824 GB; XFS[rhel 7/8默认的文…

Radius OTP完成堡垒机登录认证 安当加密

Radius OTP&#xff08;One-Time Password&#xff09;是一种用于身份验证的协议&#xff0c;它通过向用户发送一个一次性密码来验证用户的身份。使用Radius OTP可以实现堡垒机登录&#xff0c;以下是一些实现步骤&#xff1a; 1、安装Radius服务器 首先需要安装Radius服务器…

【量化交易笔记】9.量化投资理论及一般流程

前言 在第7篇文章中指出&#xff0c;量化交易的主要有两方面应用&#xff0c;基于的数据主要是两个类型&#xff0c;如前面讲的用之前的数据预测股价&#xff0c;这类数据我们可归为纵向研究数据&#xff0c;又称时间序列数据&#xff0c;另一类是横截面数据&#xff0c;以称截…

关于CW32单片机pack包安装 KEIL IAR

CW32 系列微控制器软件开发工具入门 芯片包 1. 下载芯片包 官方下载链接&#xff1a;武汉鑫源半导体 2. 安装芯片包 双击芯片包.pack文件 支持 CW32F 系列的 IDE 支持 CW32F 系列的工具链&#xff1a; • • EWARM v7.70 或更高版本 MDK-ARM v5.17 或更高版本 2.1 EW…

Android MediaMetadataRetriever setDataSource failed: status = 0xFFFFFFEA

Android MediaMetadataRetriever setDataSource抛错&#xff1a; java.lang.RuntimeException: setDataSource failed: status 0xFFFFFFEA 原因是 setDataSource(String path) path指向的视频文件大小为0或者是破损视频资源。 Android AppGlideModule,DataFetcher,ModelLoad…