C++ day41 动态规划 整数拆分 不同的二叉搜索树

题目1:343 整数拆分

题目链接:整数拆分

对题目的理解

将正整数n,拆分成k个正整数的和(k>=2)使得这些整数的乘积最大化,返回最大乘积

动规五部曲

1)dp数组的含义以及其下标i的含义

dp[i]:对 i 进行拆分,得到最大的乘积为dp[i]

2)递推公式

dp[i] = j*(i-j)    将i拆分成2个数j和-j

dp[i] = j*dp[i-j]   将i拆分成3个或3个以上的数

因为要求的是最大乘积,所以递推公式为dp[i]=max(j*(i-j),j*dp[i-j],dp[i])

3)dp数组初始化

dp[0] = 0  0只能拆成0+0,而题目要求至少拆分成两个正整数的和,所以初始化dp[0]没有意义

dp[1] = 0   1只能拆成0+1,而题目要求至少拆分成两个正整数的和,所以初始化dp[1]没有意义

dp[2] = 1    只能拆分成1+1,是两个正整数

所以只初始化dp[2]就ok

4)遍历顺序

dp[i]根据dp[i-j],所以i一定是从前向后遍历,且i是从3开始遍历,j是从1开始遍历(因为i-j>=2)

5)打印dp数组

代码

class Solution {
public:int integerBreak(int n) {//定义dp数组int dp[n+1];//初始化dp数组dp[2]=1;//递推for(int i=3;i<=n;i++){for(int j=1;j<i;j++){dp[i]=max(max(j*(i-j),j*dp[i-j]),dp[i]);}}return dp[n];}
};

这段代码会报错

报错的原因是因为dp数组使用int直接定义,不会内部初始化为0,而是任意值,所以造成这种超时错误,所以需要使用vector进行数组的定义,使用vector会默认将数组的元素定义为0

将代码改正,使用vector定义

class Solution {
public:int integerBreak(int n) {//定义dp数组vector<int> dp(n+1);//初始化dp数组dp[2]=1;//递推for(int i=3;i<=n;i++){for(int j=1;j<i;j++){dp[i]=max(max(j*(i-j),j*dp[i-j]),dp[i]);}}return dp[n];}
};
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(n)

题目2:96  不同的二叉搜索树

题目链接:不同的二叉搜索树

对题目的理解

由n个节点组成,节点值从1到n互不相同的二叉搜索树有多少种

首先明确二叉搜索树长什么样

二叉搜索树是一个有序树

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉搜索树

从图中可以看出,n为3时,当根节点为1和3时,它的左右子树布局与n为2时相同,只是数值不同而已,当根节点为2时,它的左右子树的布局与n为1时相同,因此找到了内部推导关系

动规五部曲

1)dp数组的含义以及下标i的含义

dp[i]:节点值从1到i的二叉搜索树的种类

2)递推公式

以j为头节点(j会枚举头节点从1到i),那么以j为头节点的左子树就是j-1,右子树就是i-j

dp[i] += dp[j-1] * dp[i-j],dp[i]收录节点i的所有情况(节点值从1到i二叉树的种类)

3)dp数组初始化

dp[0]=1,空子树也是一种二叉搜索树

4)遍历顺序

根据递推公式,dp[i] += dp[j-1] * dp[i-j],节点i的二叉搜索树种类,都是依靠其之前的节点确定的,所以节点要从小到大遍历

5)打印dp数组

代码

class Solution {
public:int numTrees(int n) {//定义dp数组vector<int> dp(n+1);//初始化dp数组dp[0] = 1;//递推for(int i=1;i<=n;i++){//因为节点值从1到n,每一个值都要作为根节点,都是一类情况for(int j=1;j<=i;j++){//j枚举所有从1到i所有头节点的情况dp[i]+=dp[j-1]*dp[i-j];//左子树是j-1个节点,右子树是i-j个节点}}return dp[n];}
};
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(n)

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

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

相关文章

Linux shell编程学习笔记31:alias 和 unalias 操作 命令别名

目录 0 前言1 定义别名2 查看别名 2.1 查看所有别名2.2 查看某个别名 2.2.1 alias 别名2.2.2 alias | grep 别名字符串2.2.3 使用 CtrlAltE 组合键3 unalias&#xff1a;删除别名4 如何执行命令本身而非别名 4.1 方法1&#xff1a;使用 CtrlAltE 组合键 && unalias4…

主机的具体权限规划:ACL的使用

目的&#xff1a;针对某一用户或某一组来设置特定权限需求&#xff0c;针对上&#xff0c;接着设置 ACL可以针对单一用户&#xff0c;文件&#xff0c;或者目录来进行rwx的权限设置&#xff0c;对于需要特殊权限的设置非常有帮助。 第一&#xff0c;查看文件系统是否支持&…

YOLOv5算法进阶改进(5)— 主干网络中引入SCConv | 即插即用的空间和通道维度重构卷积

前言:Hello大家好,我是小哥谈。SCConv是一种用于减少特征冗余的卷积神经网络模块。相对于其他流行的SOTA方法,SCConv可以以更低的计算成本获得更高的准确率。它通过在空间和通道维度上进行重构,从而减少了特征图中的冗余信息。这种模块的设计可以提高卷积神经网络的性能。�…

【开源】基于JAVA的森林火灾预警系统

项目编号&#xff1a; S 019 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S019&#xff0c;文末获取源码。} 项目编号&#xff1a;S019&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟…

前五年—中国十大科技进展新闻(2012年—2017年)

前五年—中国十大科技进展新闻&#xff08;2012-2017&#xff09; 2017年中国十大科技进展新闻1. 我国科学家利用化学物质合成完整活性染色体2. 国产水下滑翔机下潜6329米刷新世界纪录3. 世界首台超越早期经典计算机的光量子计算机诞生4. 国产大型客机C919首飞5. 我国首次海域天…

02【SpringBoot静态处理、错误处理】

目录 一、SpringBoot的WEB开发 1.1 静态资源的处理 1.1.1 静态资源目录 1&#xff09;SpringBoot静态资源处理 2&#xff09;关于静态资源处理的配置 3&#xff09;欢迎页面的处理 4&#xff09;修改SpringBoot资源访问路径 1.1.2 WebJars资源 1.2 注册Servlet三大组件…

java学习part17final

110-面向对象(高级)-关键字final的使用及真题_哔哩哔哩_bilibili 1.概念 tips&#xff1a;java里有const关键字&#xff0c;但是用于保留字&#xff0c;不会使用&#xff0c;目前没有意义。 final变量没有默认赋值&#xff0c;只能在以下三个地方赋值&#xff0c;且只能赋值一…

03、K-means聚类实现步骤与基于K-means聚类的图像压缩(1)

03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;1&#xff09; 03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;1&#xff09; 03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;2&#xff09; 开始学习机器学习啦&#xf…

【数据库】基于排序算法的去重,集合与包的并,差,交,连接操作实现原理,执行代价以及优化

基于两趟排序的其它操作 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏…

【Android】Android Framework系列--Launcher3各启动场景源码分析

Android Framework系列–Launcher3各启动场景源码分析 Launcher3启动场景 Launcher3是Android系统提供的默认桌面应用(Launcher)&#xff0c;它的源码路径在“packages/apps/Launcher3/”。 Launcher3的启动场景主要包括&#xff1a; 开机后启动&#xff1a;开机时&#xff…

【开源】基于JAVA的开放实验室管理系统

项目编号&#xff1a; S 013 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S013&#xff0c;文末获取源码。} 项目编号&#xff1a;S013&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

Java网络爬虫实战

List item 文章目录 ⭐️写在前面的话⭐️&#x1f4cc;What is it?分类网络爬虫按照系统结构和实现技术&#xff0c;大致可以分为以下几种类型&#xff1a;通用网络爬虫&#xff08;General Purpose Web Crawler&#xff09;、聚焦网络爬虫&#xff08;Focused Web Crawler&a…

计算机丢失vcomp140.dll是什么意思,如何解决与修复(附教程)

vcomp140.dll缺失的5种解决方法以及vcomp140.dll缺失原因 引言&#xff1a; 在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“vcomp140.dll缺失”。这个错误提示通常出现在运行某些程序或游戏时&#xff0c;给使用者带来了困扰。本文…

github访问失败

1. 问题场景 今天了解到notepad可以安装许多插件&#xff0c;但是自动下载插件时总是失败&#xff0c;这些插件的下载源都是github&#xff0c;将地址复制到浏览器也打不开&#xff0c;所以查了下github的访问问题&#xff0c;目前插件已正常下载。 2. 解决方法 gitee上搜索…

大数据数据仓库,Sqoop--学习笔记

数据仓库介绍 1. 数据仓库概念 数据仓库概念创始人在《建立数据仓库》一书中对数据仓库的定义是&#xff1a;数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的&#xff08;Subject Oriented&#xff09;、数据集成的&#xff08;Integrated&#xff09;、相对…

【MATLAB源码-第86期】基于matlab的QC-LDPC码性能仿真,输出误码率曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 QC-LDPC&#xff08;准循环低密度奇偶校验&#xff09;编码是一种高效的错误校正编码方式&#xff0c;广泛应用于通信系统和数据存储中以提高数据的可靠性。它是低密度奇偶校验&#xff08;LDPC&#xff09;编码的一种特殊形…

Zookeeper分布式锁实现Curator十一问

前面我们通过Redis分布式锁实现Redisson 15问文章剖析了Redisson的源码&#xff0c;理清了Redisson是如何实现的分布式锁和一些其它的特性。这篇文章就来接着剖析Zookeeper分布式锁的实现框架Curator的源码&#xff0c;看看Curator是如何实现Zookeeper分布式锁的&#xff0c;以…

wpf使用CefSharp.OffScreen模拟网页登录,并获取身份cookie,C#后台执行js

目录 框架信息&#xff1a;MainWindow.xamlMainWindow.xaml.cs爬取逻辑模拟登录拦截请求Cookie获取 CookieVisitorHandle完整代码参考项目 框架信息&#xff1a; CefSharp.OffScreen.NETCore 109.1.110 .NET 7 CefSharp.OffScreen.NETCore v114.2.100 第一版使用这个&#x…

shiro整合redis

shiro整合redis 前言&#xff1a;shiro默认的session是存储在jvm内存中的&#xff0c;这样会导致java服务内存占用更大以及一旦服务器宕机或者版本迭代需要重启服务时&#xff0c;缓存中的数据不能恢复&#xff0c;导致用户需要重新登录认证&#xff0c;体验很差。因此利用第三…