【leetcode】96. 不同的二叉搜索树(动态规划)

LeetCode96不同的二叉搜索树(动态规划) 算法特点及适用场景该算法基于动态规划思想,通过合理定义状态和推导状态转移方程,巧妙地解决了计算不同二叉搜索树数量的问题。代码实现较为简洁直观,易于理解和实现,通过逐步累加不同根节点选择下的子树组合情况来得到最终结果。适用于类似具有组合计数、根据子结构情况递推整体结构数量等特点的问题,比如在一些树形结构相关的计数问题、特定规则下的排列组合问题等场景中,如果能抽象出类似的子结构与整体结构的递推关系,都可以尝试运用这种动态规划的思路来求解。注意事项及可能遇到的问题。 阅读详情

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

示例:

输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:

在这里插入图片描述


分析:
可以转换成数学公式来解。
12345…理解为一个数组,其中的每个节点都可以拎起来,当做根节点。
故,可以划分为左子树有i-1个节点,右子树有n-1个节点。(其中一个位根节点)

递归写法,必定超时。用hash表存一下也不行。

// 还是超时
int numTreesImpl(int n, unordered_map<int, int>& hash)
{
	if (n == 1 || n == 0) return 1;


	int res = 0;
	for (int i = 0; i < n; i++)
	{
		int left = 0;
		int right = 0;
		if (hash.find(i) != hash.end())
		{
			left = hash.find(i)->second;
		}
		else
		{
			left = numTreesImpl(i, hash);
		}

		if (hash.find(n - i - 1) != hash.end())
		{
			right = hash.find(n - i - 1)->second;
		}
		else
		{
			right = numTreesImpl(n - i - 1, hash);
		}

		res += left * right;
	}
	return res;
}

// https://leetcode-cn.com/problems/unique-binary-search-trees/
// 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
// 超时递归
int numTrees(int n) { 
	unordered_map<int, int> hash;
	return numTreesImpl(n, hash);
}

然后用动态规划的思想来解这个问题。
用一个dp[n+1]的数组保存自底向上计算出来的子结果。其中当前节点dp[i]的值,可以表示为
dp[i] += dp[j - 1] * dp[i - j]
其中j从1到i。是一个累加的和

int numTrees(int n) {
	vector<int> dp(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];
}
帆软报表JS导出避坑指南:如何正确处理sessionid和参数传递 本文深入探讨了帆软报表中通过JavaScript实现一键导出的关键技术,重点解析了如何正确获取并传递sessionid以确保会话不丢失,以及如何构造包含必要参数的导出URL。文章详细对比了预览后导出与直接URL导出两种方式的差异,并提供了从参数拼接、前端触发下载到高级场景(如SPA集成)的完整避坑指南,帮助开发者构建稳定可靠的自定义导出功能。 阅读详情

相关推荐

匈牙利算法解决指派问题清晰流程

匈牙利算法解决指派问题清晰流程 百度词条上,指派问题(Assignment problem)是这么定义的:在满足特定指派要求条件下,使指派方案总体效果最佳。如:有若干项工作需要分配给若干人(或部门)来完成;有若干项合同需要选择若干个投标者来承包:有若干班级需要安排在若干教室里上课等。   一、做减法(归约): 行归约:每行元素减去该行最小元素。 列归约:每行元素减去该行最小元素。

siss0siss的博客 6万+

动态规划之不同的二叉查找树

不同的二叉查找树 给出 n,问由 1…n 为节点组成的不同的二叉查找树有多少种? 样例 1: 输入: n = 3 输出: 5 解释: 有5种不同形态的二叉查找树 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1

Zero丶的专栏 1468

Palantir Vertex:数字孪生模拟与决策系统深度指南

Palantir Vertex是Foundry系统中的核心数字孪生模块,本质上是一个决策模拟器而非简单的数据可视化工具。它基于本体层构建,通过对象关系网络模拟现实世界实体,填补数据模型与业务决策间的鸿沟。核心功能包括:创建隔离的沙盒场景进行假设测试、修改参数模拟不同干预方案、对比虚实数据发现异常,并最终将最优决策回传至业务系统。典型应用场景涵盖供应链韧性评估、资产维护优化和应急方案制定等,帮助用户在复杂环境中做出更优决策。

轩哥的个人研究和成长记录 891

搜索树基础:二叉搜索树(详解特性用途,图解实现过程)

有兴趣学数据结构了吗?

LEE180501的博客 3223

Ubuntu1804 关于ubuntu18.04下载软件仓库信息失败,请检查网络连接 的解决方案

今天电脑在更换软件源的时候遇到了这个问题。出现了如上图所示的错误信息。 尝试了各家优快云的博客之后,发现方法大同小异,均无法解决。 方法大多都是要求更换软件源,如下所示: 打开“Ubuntu软件中心”-->点击“编辑”-->点击“软件源”-->在Ubuntu软件界面,“下载自”默认是“中国的服务器”,改为“主服务器”试试 2.打开更新管理器-》设置-》选择站点-》...

weixin_43729409的博客 1万+

别再只用线性回归了!用sklearn的核岭回归搞定非线性数据(附RBF核调参实战)

本文详细介绍了如何使用sklearn的核岭回归处理非线性数据,特别是RBF核的应用与调参实战。通过网格搜索找到最佳参数组合,核岭回归能有效捕捉数据中的复杂波动,显著提升模型性能。适合需要解决非线性问题的数据科学家和机器学习工程师。

weixin_34246529的博客 336

5.不同的二叉搜索树

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 ...

一条咸鱼的博客 839

Ansys Zemax|无焦系统设计中的角度单位优化技巧

本文详细介绍了在Ansys Zemax OpticStudio中进行无焦系统设计的核心技巧。重点阐述了从聚焦思维到角度思维的转换,并演示了如何通过开启‘无焦像空间’模式、构建以波前和光束尺寸为目标的评价函数来优化激光扩束镜等系统。文章还分享了使用IMSF操作数处理混合系统以及常见误区避坑的实用指南,旨在帮助光学设计者高效完成无焦系统的设计与分析。

weixin_29231027的博客 358

二叉树详解

1.二叉树的概念 1.1二叉树的定义 二叉树是另一种树形结构,其特点是每个结点至多只有两棵子树(即不存在度大于2的结点),二叉树有左右之分,其次序不能任意颠倒。 图1.1 左右子树有顺序 ...

adong6561975的博客 3554

ST-LINK调试STM32H743必看:CubeMX工程中缺失的这行代码导致程序跑飞

本文深入剖析了使用ST-LINK调试STM32H743时,因CubeMX工程中缺失电源电压档位配置代码而导致程序跑飞或出现“Can not access memory”错误的问题。文章解释了H7系列电源与时钟耦合的核心原理,提供了具体的代码修复方案和系统化的调试排查思路,帮助开发者从根本上解决这一常见调试困境。

weixin_29191669的博客 281

车规SoC深度对比:高通8397 vs 比亚迪D9000 vs 联发科CT-X1/MT8676/MT2715

芯片优势弱势最适合场景高通 8397低功耗、低延迟AI和音频处理单屏算力略低HUD + 音响座舱 + 低延迟交互D9000多屏渲染、Wi-Fi7高速通信AI算力中等高端多屏座舱 + 流媒体娱乐CT-X1极高AI算力、多模态渲染功耗较高高端沉浸式智能座舱 + 多摄像头感知MT8676算力均衡、座舱应用全面GPU稍弱全栈智能座舱、音视频多任务MT2715成本低、入门座舱可用算力低,低端显示入门智能座舱、基础信息娱乐。

weixin_43199439的博客 1767

二叉树详细版

为什么要研究二叉树? 特点: 每个结点的度要么是0,1或2 子树次序不能颠倒 可以为空树 二叉树和树的主要差别: 二叉树的每个结点的位置固定,可以为空,分左右,但它也不是有序树,而是一种独立的概念 以上是二叉树只有两个结点的形态,这样两种 若有3个结点,二叉树形态: 比如,可以分在两层,三层:(自己画一画) 实际上有5种:3个结点分布在一层,还有3个结点分布在两层(左右位置不一样):左右,右左,左左,右右 如果是3个结点的树,只有两种..

weixin_52634719的博客 1454

使用 PLS 回归进行近红外光谱的异常值检测

在光谱数据中,并非每个数据点都是有效的,因此,在构建模型时找到与大部分数据不符合的数据点是一种必要的操作。这些数据我们称之为。在这篇文章中,我们将使用PLS回归进行红外光谱数据的异常值检测。

qq_44204759的博客 1422

动态规划 Leetcode 96 不同的二叉搜索树

要点:1.递推公式,想到以根节点数字不同作为分类条件求和得到dp[i];

weixin_46930685的博客 298

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【动态规划】【卡特兰数】Leetcode 96. 不同的二叉搜索树

【动态规划】【卡特兰数】Leetcode 96. 不同的二叉搜索树

prince0520的博客 858

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

最优二叉搜索树 动态规划_leetcode96. 不同的二叉搜索树

leetcode96. 不同的二叉搜索树给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?示例:输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 / / / 3 2 1 1 ...

weixin_39661345的博客 202

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[LeetCode]96. 不同的二叉搜索树(java实现)动态规划

[LeetCode]96. (java实现)1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 思路(): 3. 解法 ---------------------------------------------------解法---------------------------------------------------: 可能存在的问题: 4. 可能有帮助的前置习题 5. 所用到的

cloud的博客 535

leetcode96.不同的二叉搜索树/动态规划

给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / ...

yyf_blog 206

动态规划 | LeetCode-96. 不同的二叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的总数。求 n 个节点所能组成的二叉搜索树的总数,可以先取 1 个节点作为根节点,剩下的 n-1 个节点分成两堆,记为 i 和 j,分别作为左右子树。此时 n 个节点所能组成的二叉搜索树的总数,就可以拆分成左子树的可能总数 乘以 右子树的可能总数。因此,只需要遍历所有可能的左右子树的节点分布情况,最终就能算出 n 个节点所能组成的二叉搜索树的总数。最小规模的子问题是 1 个节点和 0

qq_45931691的博客 506

力扣-动态规划-96. 不同的二叉搜索树

力扣-动态规划-96. 不同的二叉搜索树

qianxunsiyue的博客 396

LeetCode 96. 不同的二叉搜索树(动态规划)

LeetCode 96. 不同的二叉搜索树。

virtual_YL的博客 203

Leetcode 96. 不同的二叉搜索树 动态规划

动态规划

想买很多漂亮衣服但是买不起的博客 119

力扣LeetCode: 96.不同的二叉搜索树(动态规划)

【代码】力扣LeetCode: 96.不同的二叉搜索树(动态规划)

欢迎访问我的个人Blog网站:blog.homeryland.org 173

力扣96. 不同的二叉搜索树(动态规划解法)

力扣96. 不同的二叉搜索树(动态规划解法)

overflow_stdio的博客 256

2021-11-16 leetcode动态规划 96.不同的二叉搜索树 c++

题目 leetcode 96. 不同的二叉搜索树 二叉搜索树 二叉搜索树 一棵搜索二叉树的两种情况: i) 空树 ii) 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值 题目要素 已知有序序列 1⋯n,求可构建出的不同二叉搜索树的种数 思路 求不同种类的二叉搜索树需要保证两个方面:二叉树的特性和不同搜索二叉树的唯一性 解释: 二叉树的特性:左子树结点值小于根结点值,右子树结点值大于根结点值; 唯一性:每个搜索二叉树都不一样 如何

weixin_51745630的博客 933

[动态规划] Leetcode 96. 不同的二叉搜索树

[动态规划] Leetcode 96. 不同的二叉搜索树

qq_44653420的博客 172
上一篇: 【leetcode】42. 连续子数组的最大和(动态规划)
下一篇: 【leetcode】46. 全排列(回溯法,回溯类问题如何解决)
eclipse_c
博客等级 码龄14年 28粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值