LeetCode算法题解(动态规划)|LeetCode343. 整数拆分、LeetCode96. 不同的二叉搜索树

一、LeetCode343. 整数拆分

题目链接:343. 整数拆分
题目描述:

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。

返回 你可以获得的最大乘积 。

示例 1:

输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:

输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。

提示:

  • 2 <= n <= 58
算法分析:
定义dp数组及下标含义:

dp[i]表述正整数i拆分成k个正整数乘积所能够得到的最大值。

递推公式:

用一个j来遍历从1到i,得到两个dp[i],即dp[i]=j*(i-j)(将整数i分成两个正整数j和i-j),和dp[i]=j*dp[i-j]。

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

初始化:

dp[0]和dp[1]初始化没有意义,所以我们初始化dp[2]=1(2拆分成两个1相乘)。

遍历顺序:

因为dp[2]已经初始化了,所以我们从3遍历到n。

代码如下:

class Solution {public int integerBreak(int n) {int[] dp = new int[n + 1];dp[2] = 1;//初始化for(int i = 3; i <= n; i++) {for(int j = 1; j < i; j++) {dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));}}return dp[n];}
}

时间复杂度o(n^2),空间复杂度o(n)。

二、LeetCode96. 不同的二叉搜索树

题目链接:96. 不同的二叉搜索树
题目描述:

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 19
算法分析:
定义dp数组及下标含义:

dp[i]表示i个节点组成的二叉搜索树的种树。

递推公式:

j从1遍历到i,当j为头节点时,左子树有i-1个节点,左子树的种类数相当于dp[j-1],右子树有i-j个节点,右子树的种类数相当于dp[i-j]。

所以dp[i]+=dp[j-1]*dp[i-j],j从1比那里遍历到i;

初始化:

dp[0]初始化为1(0的话会影响乘法结果),dp[1]初始化为1(一个节点的二叉搜索树只有一种情况)

遍历顺序:

i从2遍历到n,然后确定dp[i](dp[i]+=dp[j-1]*dp[i-j])。

如果结果有误打印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];}
}

时间复杂度o(n^2),空间复杂度o(n)

总结

这两道题还是比较难的,自己想很难有思路。

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

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

相关文章

​极氪,中国传统汽车品牌电动化的样板间

这篇文章早就想写了&#xff0c;因为太忙的原因就一直跳票&#xff0c;正好最近两件事的出现&#xff0c;又触发了想写这篇文章的冲动。 两件事主要是&#xff1a; 一&#xff0c;10 月份各家陆续公布了单月销量以及累计销量&#xff1b; 二&#xff0c;极氪在北京正式发布了 …

LeetCode100131. Make Three Strings Equal

文章目录 一、题目二、题解 一、题目 You are given three strings s1, s2, and s3. You have to perform the following operation on these three strings as many times as you want. In one operation you can choose one of these three strings such that its length i…

PTA 7-2 简单计算器

7-2 简单计算器 分数 20 全屏浏览题目 作者 张彤彧 单位 浙江大学 模拟简单运算器的工作。假设计算器只能进行加减乘除运算&#xff0c;运算数和结果都是整数&#xff0c;四种运算符的优先级相同&#xff0c;按从左到右的顺序计算。 输入格式: 输入在一行中给出一个四则运…

【GUI】-- 10 贪吃蛇小游戏之静态面板绘制

GUI编程 04 贪吃蛇小游戏 4.1 第一步&#xff1a;先绘制一个静态的面板 首先&#xff0c;需要新建两个类&#xff0c;一个StartGame类作为游戏的主启动类&#xff1b;一个GamePanel类作为游戏的面板类。此外&#xff0c;再新建一个Data类作为数据中心(存放了小蛇各部分图像的…

微信朋友圈全新玩法,轻松互动,引爆你的社交圈

随着社交媒体的普及&#xff0c;越来越多的人开始利用朋友圈来展示自己的生活和与朋友互动。而在这个数字时代&#xff0c;定时发圈、跟圈和朋友圈互动已经成为了一种社交习惯。本文将介绍这些功能的概念和一键转发朋友圈的实现方法。 什么是定时发圈、跟圈、朋友圈互动和一键转…

Embedding技术与应用(4): Embedding应用工程探析

编者按&#xff1a;随着互联网内容数量的急剧增长&#xff0c;个性化推荐已成为各大科技公司的核心竞争力之一。那么&#xff0c;如何构建一个可靠、高效的基于嵌入技术的推荐系统&#xff0c;使其能够在实际生产环境中正常运行呢&#xff1f;这是所有从业者都关心的问题。 本文…

git的实验:cherry-pick,github对比代码的两种方式

某个commit&#xff0c;比如 c1&#xff0c;&#xff0c;最早是在a分支做的&#xff0c;当被cherry-pick到b分之后&#xff0c;还是一样的revision吗&#xff1f; 实验1&#xff1a;c1被cherry-pick到别的分支后&#xff0c;revision不变对吗&#xff1f;&#xff08;答案是变…

druid keepAlive 导致数据库连接数飙升

一.背景 应用在执行完某个复杂业务&#xff0c;主要包含20几个查询SQL的操作后&#xff0c;会导致数据库连接池一直升高 druid版本&#xff1a;1.2.11 druid配置文件&#xff1a; spring.datasource.druid.maxActive100 spring.datasource.druid.initialSize20 spring.datas…

python解决登录图形验证码

摘要:测试过程中经常遇到图片验证码,以下主要是调用百度OCR图片识别获取验证码,实现登录 1、百度云申请创建应用

【自动驾驶】一些业内自动驾驶专业术语释义

Trajectory 轨迹信息&#xff0c;一般都会发布未来5-10秒的trajactory信息。 Trajectory flicker 轨迹抖动 Nudge 道内避障。在维持车道不变的情况下&#xff0c;横向偏离车道中心以绕开obstacle/agent。 Xlane Nudge 借道避障。借用对向车道或自行车道以绕开obstacle/a…

VMware Workstation 与 Device/Credential Guard 不兼容 解决办法

问题描述 问题描述&#xff1a; VMware 启动虚拟机会报错。无法运行。 错误信息&#xff1a;VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 原因分析&#xff1a; 通常原因是 Window 系统开启了 内置的Hyper-V 虚拟机。 解决方案&…

气死了,过五关,斩六将,结果被 HR 捅了一刀!!

Hello&#xff0c;大家好&#xff0c;我是 Sunday。 大家有没有遇到过这样的事情&#xff1a;“过五关&#xff0c;斩六将。通过了两轮、甚至是三轮的技术面&#xff0c;最后 HR 面被“捅死”了” 这样的事情&#xff0c;最近在一位同学身上连续出现了两次&#xff0c;弄得人…

【资深硬件工程师总结-千兆以太网设计指南】

文章目录 01通用PCB布线指南02标志焊盘中的接地过孔区示例03EMI注意事项04ESD注意事项 资深硬件工程师总结-千兆以太网设计指南 本应用笔记旨在帮助客户使用Microchip的10/100/1000 Mbps以太网器件系列设计PCB。本文档提供有关PCB布线的建 议&#xff0c; PCB 布线是保持信号完…

【算法挨揍日记】day30——300. 最长递增子序列、376. 摆动序列

300. 最长递增子序列 300. 最长递增子序列 题目解析&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#…

递增递减运算符 ++ -- 前置后置的区别

1 18 运算符-算术运算符-递增递减_哔哩哔哩_bilibili 2 .1 #include <iostream> using namespace std; int main() {int a 0;int b 0;a ;b ;cout << "a " << a << endl;cout << "b " << b << endl;} 输出…

whip和whep

原文为runner365.git大佬的文章 原文链接&#xff1a;https://blog.csdn.net/sweibd/article/details/124552793 WHIP接口 什么是whip 全称: WebRTC-HTTP ingestion protocol (WHIP). rfc地址: rfc-draft-murillo-whip-00 简单说&#xff0c;就是通过HTTP接口能导入webrtc媒…

上位机与plc写心跳定时扫描连接状态

方法一&#xff1a;上位机读plc的某个地址&#xff0c;每秒 置0和置1&#xff0c;plc检查地址值每3秒值都是1就报错。 方法二&#xff1a;上位机每两秒给地址置1&#xff0c;plc一秒读到1就清除信号&#xff0c;读到0说明心跳掉线了。

C++电脑组装项目(涉及知识点:多态)

需求&#xff1a; #include <iostream> #include "Computer.h" #include "AbstractCpu.h" #include "AbstractMemory.h" #include "AbstractVideoCard.h" #include "IntelCpu.h" #include "IntelMemory.h" …

Redis的持久化(新)

Redis中数据都保存在内存&#xff0c;但是内存中的数据变换很快&#xff0c;也很容易丢失&#xff0c;比如连接断开、宕机停机等等。而Redis提供的数据持久化机制有RDB(Redis DataBase)和AOF(Append Only File)。 1.RDB RDB是指在指定的时间间隔内将内存中的数据集快照写入到磁…

HTML玩转超链接a标签

大家应该都知道&#xff0c;a标签主要是转跳链接&#xff0c;接下来&#xff0c;让我为大家介绍一下a标签的使用&#xff01; 主要的作用&#xff1a;从当前页面进行跳转 标签名标签语义常用属性单/双标签a超链接href&#xff1a;要跳转的具体位置 target&#xff1a;跳转时如…