Leetcoder Day36| 动态规划part03

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。

本题需要注意的是,至少拆成2个正整数的和,而不是正好是2个正整数。

  1. 确定dp数组以及下标的含义:dp[i]为整数i拆分后的最大乘积
  2. 确定递推公式:假如将i拆分为j和i-j,这里j不只是代表一个数字而是一可能由j个整数组成的乘积。如果从1遍历到j,有两种途径可以得到dp[i],一个是dp[i]=j*(i-j),另一个是dp[i]=j*dp[i-j],这里dp[i-j]代表i-j这个数字被拆分后的最大值。
  3. dp数组如何初始化:本题将i拆成0是没有意义的,所以不考虑,1拆开只能是1和0,也是没有意义的,所以从2开始初始化,2可以拆成1 + 1,因此dp[2]=1
  4. 确定遍历顺序:既然初始化是从2开始的,所以i从3开始遍历,j从1开始遍历,到i停止。
  5. 举例推导dp数组:没法通过简单计算举例。
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*dp[i-j], j*(i-j)));}}return dp[n];}
}

⚠️本题的优化思路:其实将对于j的遍历条件改为: j<i-1可以节省一步计算,因为如果让j=i-1,其实在 j = 1的时候,这一步就已经拆出来了,属于重复计算,所以 j < i - 1。

更优化一步,可以这样:

for (int i = 3; i <= n ; i++) {for (int j = 1; j <= i / 2; j++) {dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));}
}

因为拆分一个数i使之乘积最大,比如i=x+(i-x) dp[i]=x(i-x)=xi-x^2,这时是一个向下的抛物线,最大点为x/2

96.不同的叉搜索树

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

示例:

这道题要求能构造多少二叉搜索树。二叉搜索树是有一定规律的,其中序遍历是有序的。按照示例所给,可以先从1开始遍历,看以i为根节点能构造出多少子树。其实一开始还是没有什么思路,主要是递推公式不太好想,所以准备按照五部曲依次思考一下:

  1. 确定dp数组以及下标的含义:dp[i]为有i个节点时能构造的二叉搜索树个数。
  2. 确定递推公式:目前还没有什么思路。
  3. dp数组如何初始化:若n=1,则dp[1]毫无疑问是1,若n=2,则有两种构造方法,一种是以1为根节点,左子树为空,右子树为2;一种是以2为根节点,左子树为1,右子树为空,所以dp[2]=2;n=3就是示例中所给情况,可以看到,如果以1为根节点,则左子树一定为空的,右子树有两种可能,分别是以2和3为子树根节点。若以2为根节点,则左右子树各有一个节点,有一种可能,若以3为根节点,则右子树为空,左子树有两种可能,分别是以1和2为子树根节点。

当分析到如何初始化的时候,已经渐渐有了关于推导递推公式的雏形,接下来可以捋一下思路:

当n=1时:只有一个节点,不附图了

当n=2时:如下

当n=3时,有三种大的情况:

  1. 以1为根节点:因为此题本质求的是树的形状的可能性,所以跟具体的数值关系不大,如果把1去掉来看,可以看到,其实剩下的形状和n=2的时候是一样的:
  2. 以2为根节点:左边节点1,右边节点3
  3. 以3为根节点:去掉3,剩下的形状和n=2的时候也是一样的:

因此

  • 有2个元素的搜索树数量就是dp[2]。
  • 有1个元素的搜索树数量就是dp[1]。
  • 有0个元素的搜索树数量就是dp[0]。

可以这样推导:

  1. 以1为头节点的搜索树个数=右子树有2个元素搜索树数量*左子树有0个元素搜索树数量
  2. 以2为头节点的搜索树个数=右子树有1个元素搜索树数量*左子树有1个元素搜索树数量
  3. 以3为头节点的搜索树个数=右子树有0个元素搜索树数量*左子树有2个元素搜索树数量

那么n=3时,dp[3]就是上面三种情况的搜索树个数之和,即dp[3]=dp[2]*dp[0]+dp[1]*dp[1]+dp[0]*dp[2] ,

拓展到i就是:不断地累加:dp[以j为头结点左子树节点数量]*dp[以j为头结点右子树节点数量],j的范围为[1, i]

所以递推公式为:dp[i]+=dp[j-1]*dp[i-j],因此下面完整的五部曲为:

  1. 确定dp数组以及下标的含义:有i个节点时能构造的二叉搜索树个数
  2. 确定递推公式:dp[i]+=dp[j-1]*dp[i-j]
  3. dp数组如何初始化:要注意,从定义上来讲,空节点也是一棵二叉树,也是一棵二叉搜索树,所以dp[0]=1,这个我一开始弄错了。dp[1]=1
  4. 确定遍历顺序:i从1到n,j从1到i
  5. 举例推导dp数组:无法手动举更多例子
class Solution {/**确定dp数组以及下标的含义:有i个节点时能构造的二叉搜索树个数确定递推公式:dp[i]+=dp[j-1]*dp[i-j]dp数组如何初始化:dp[1]=1,dp[2]=2确定遍历顺序:i从3到n,j从1到i*/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.mzph.cn/news/717333.shtml

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

相关文章

如何提取图片中某个位置颜色的RGB值,RGB十进制值与十六进制的转换

打开本地的画图工具&#xff0c;把图片复制或截图粘进去&#xff0c;用颜色提取器点对应的位置就可以提取了。 获取到的 RGB 值为 (66,133,244) 转化后的值为 #4285F4。 【内容拓展一】&#xff1a;RGB 十进制值与十六进制的转换 当我们从 RGB 十进制值转换为十六进制值时&a…

Yapi部署

【GO开发工程师】Yapi部署 推荐个人主页&#xff1a;席万里的个人空间 文章目录 【GO开发工程师】Yapi部署1、Yapi部署 1、Yapi部署 初始化yapi&#xff1a; git clone https://github.com/Ryan-Miao/docker-yapi.git cd docker-yapi docker-compose upyapi启动失败 1.cd进入…

粉丝福利-纯净Windows系统安装镜像下载网站

​Windows操作系统镜像文件是从微软或其他经过验证的来源下载正版操作系统安装介质的关键所在。以下是详细阐述从不同渠道获取Windows系统镜像的说明,尤其强调官方和安全的下载途径。Windows系统镜像可以从多个可靠来源下载,以下是几个推荐的选择: 微软官方网站 微软官方网…

对于《幻兽帕鲁》这样的游戏,如何优化服务器性能以提高游戏体验?

对于《幻兽帕鲁》这样的游戏&#xff0c;如何评估和优化服务器性能以提高游戏体验&#xff1f; 硬件配置优化&#xff1a;选择高性能的服务器&#xff0c;如4核16G的幻兽帕鲁服务器&#xff0c;这样可以保证有足够的计算性能和内存容量来支持游戏的运行。同时&#xff0c;考虑到…

Node.js(六)-数据库与身份认证

一 、学习目标 ◆ 能够知道如何配置MySQL数据库环境 ◆ 能够认识并使用常见的 SQL语操作数据库 ◆ 能够在Express中操作MySQL数据库 ◆ 能够了解 Session的实现原理 ◆ 能够了解JWT的实现原理 二、数据库的基本概念 1.1 什么是数据库 数据库&#xff08;database&#xff09;…

边缘计算网关的重要作用-天拓四方

随着物联网技术的迅猛发展&#xff0c;数据量的爆炸式增长对数据处理和分析提出了更高的要求。边缘计算网关作为连接物理世界和数字世界的桥梁&#xff0c;正逐渐受到各行业的重视。本文将从行业背景、功能特点以及带来的效益等方面&#xff0c;探讨边缘计算网关在当前及未来的…

备战蓝桥杯---状态压缩DP基础2之TSP问题

先来一个题衔接一下&#xff1a; 与上一题的思路差不多&#xff0c;不过这里有几点需要注意&#xff1a; 1.因为某一列的状态还与上上一行有关&#xff0c;因此我们令f[i][j][k]表示第i行状态为j,第i-1行状态为k的最大炮兵数。 因此&#xff0c;我们可以得到状态转移方程&…

成功解决git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af

成功解决git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af 问题描述解决方案 问题描述 用git的时候可能会遇到这个问题&#xff1a; (base) zhouzikang7443-8x4090-120:~/project$ git clone https://github.com/123/12…

Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书

先看下效果&#xff1a; 原来的是 http&#xff0c;配置好后 https 也能用了&#xff0c;并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的&#xff0c;还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

【leetcode】圆圈中最后剩下的数字

目录 1. 问题 2. 思路 3. 代码 4. 运行 1. 问题 本题即为典型的约瑟夫问题&#xff0c;通过递推公式倒推出问题的解。原始问题是从n个人中每隔m个数踢出一个人&#xff0c;原始问题变成从n-1个人中每隔m个数踢出一个人…… 示例 1&#xff1a; 输入: n 5, m 3 输出: 3…

Unity TMP文字移动效果

前言 看见很多游戏有很特殊的波浪形文字效果&#xff0c;于是来尝试一下控制TMP文字顶点的方式达到类似效果。 原理 挂载tmp text&#xff0c;在里面随便放入非空格字符。 tmp text组件开放了textInfo接口&#xff0c;也就是GetComponent<TextMeshProUGUI>().textInfo…

两天学会微服务网关Gateway-Gateway简介

锋哥原创的微服务网关Gateway视频教程&#xff1a; Gateway微服务网关视频教程&#xff08;无废话版&#xff09;_哔哩哔哩_bilibiliGateway微服务网关视频教程&#xff08;无废话版&#xff09;共计17条视频&#xff0c;包括&#xff1a;1_Gateway简介、2_Gateway工作原理、3…

使用.NET开发VSTO工具快速将PPT导出为图片

本文主要介绍如何使用.NET开发 PowerPoint VSTO 外接程序&#xff0c;并实现快速的将当前页PPT导出为图片的功能。可以帮助你了解如何使用 VSTO 开发 Office 外接程序&#xff0c;以及如何操作 PowerPoint 的对象模型。 1. 背景 在日常的文章写作中&#xff0c;我经常使用 PPT…

JUC并发编程 深入学习Java并发编程【上】

JUC并发编程&#xff0c;深入学习Java并发编程&#xff0c;与视频每一P对应&#xff0c;全系列6w字。 P1-5 为什么学特色预备知识 进程线程概念 进程&#xff1a; 一个程序被运行&#xff0c;从磁盘加载这个程序的代码到内存&#xff0c;就开起了一个进程。 进程可以视为程…

JVM相关问题

JVM相关问题 一、Java继承时父子类的初始化顺序是怎样的&#xff1f;二、JVM类加载的双亲委派模型&#xff1f;三、JDK为什么要设计双亲委派模型&#xff0c;有什么好处&#xff1f;四、可以打破JVM双亲委派模型吗&#xff1f;如何打破JVM双亲委派模型&#xff1f;五、什么是内…

Spring Cloud Gateway-系统保护Sentinel集成

文章目录 Sentinel介绍Spring Cloud Gateway集成Sentinelpom依赖Sentinel配置Sentinel集成Nacos作为数据源自定义降级响应 Sentinel介绍 ​ 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&a…

HTML5:七天学会基础动画网页6

CSS3自定义字体 ①&#xff1a;首先需要下载所需字体 ②&#xff1a;把下载字体文件放入 font文件夹里&#xff0c;建议font文件夹与 css 和 image文件夹平级 ③&#xff1a;引入字体&#xff0c;可直接在html文件里用font-face引入字体&#xff0c;分别是字体名字和路径 例…

Django官网项目

项目准备 使用VSCODE做IDE。 检查Python版本。 sudo apt install sudo apt update python3 --version创建项目路径&#xff0c;创建虚拟环境&#xff0c;创建项目 路径 \mysite 进入路径&#xff0c;运行VSCODE 运行 "code ." 创建虚拟环境。 选择 >python: c…

【推荐算法系列十七】:GBDT+LR 排序算法

排序算法经典中的经典 参考 推荐系统之GBDTLR 极客时间 手把手带你搭建推荐系统 课程 逻辑回归&#xff08;LR&#xff09;模型 逻辑回归&#xff08;LR,Logistic Regression&#xff09;是一种传统机器学习分类模型&#xff0c;也是一种比较重要的非线性回归模型&#xff…

AAAI2024-分享若干篇有代码的优秀论文-图神经网络、时间序列预测、知识图谱、大模型等

图神经网络、大模型优化方向系列文章目录 为了方便大家根据自己的兴趣查看自己的研究方向论文&#xff0c;在这里进行了细分。如果有对其中的论文感兴趣的&#xff0c;可以查看对应的文章在论文相应的代码&#xff0c;方便快速上手学习&#xff0c;也可以借助这些代码的学习快…