当前位置: 首页 > news >正文

安徽省住房和城乡建设厅门户网站如何做网站与网页

安徽省住房和城乡建设厅门户网站,如何做网站与网页,黄骅市海边,linux服务器安装网站力扣第96题 - 不同的二叉搜索树 题目描述 给定一个整数 n#xff0c;求以 1 到 n 为节点组成的所有 不同的二叉搜索树#xff08;BST#xff09; 的个数。 题目分析 二叉搜索树的性质 对于一个二叉搜索树#xff0c;以 i 为根节点#xff1a; 左子树的节点值来自 [1, i…力扣第96题 - 不同的二叉搜索树 题目描述 给定一个整数 n求以 1 到 n 为节点组成的所有 不同的二叉搜索树BST 的个数。 题目分析 二叉搜索树的性质 对于一个二叉搜索树以 i 为根节点 左子树的节点值来自 [1, i-1]。右子树的节点值来自 [i1, n]。 左右子树分别是独立的子问题即左右子树的结构不会相互影响。 解法思路 本题的核心在于使用 动态规划 或 卡特兰数公式 进行求解。 解法1动态规划 定义状态 设 dp[i] 表示由 i 个节点组成的不同 BST 的个数。 状态转移方程 当以 j 为根节点时 左子树有 j-1 个节点右子树有 i-j 个节点。 所以以 j 为根的 BST 数量为 d p [ j − 1 ] × d p [ i − j ] dp[j-1] \times dp[i-j] dp[j−1]×dp[i−j]将 j 从 1 到 i 遍历累加所有可能的情况 d p [ i ] ∑ j 1 i d p [ j − 1 ] × d p [ i − j ] dp[i] \sum_{j1}^{i} dp[j-1] \times dp[i-j] dp[i]∑j1i​dp[j−1]×dp[i−j] 初始化 dp[0] 1空树是一种有效的 BST。dp[1] 1只有一个节点的树只有一种结构。 实现步骤 创建数组 dp大小为 n1。初始化 dp[0] 和 dp[1]。从 2 到 n 遍历计算每个 dp[i]。最后返回 dp[n]。 C语言实现动态规划 #include stdio.h #include stdlib.hint numTrees(int n) {// 动态规划数组int* dp (int*)malloc((n 1) * sizeof(int));dp[0] 1; // 空树dp[1] 1; // 只有一个节点// 填充 dp 数组for (int i 2; i n; i) {dp[i] 0;for (int j 1; j i; j) {dp[i] dp[j - 1] * dp[i - j];}}int result dp[n];free(dp); // 释放内存return result; }int main() {int n 5; // 测试输入printf(Number of unique BSTs for n %d: %d\n, n, numTrees(n));return 0; }复杂度分析 时间复杂度 双层循环外层从 2 到 n内层从 1 到 i。总体复杂度为 O ( n 2 ) O(n^2) O(n2)。 空间复杂度 动态规划数组 dp 的大小为 O ( n ) O(n) O(n)。 解法2卡特兰数公式 公式推导 二叉搜索树的数量满足卡特兰数定义 C n 1 n 1 ( 2 n n ) C_n \frac{1}{n1} \binom{2n}{n} Cn​n11​(n2n​) C n C_n Cn​ 是第 n 个卡特兰数。它表示从 1 到 n 的节点所组成的不同 BST 的个数。 实现步骤 使用卡特兰数的公式直接计算 C n ( 2 n ) ! ( n 1 ) ! ⋅ n ! C_n \frac{(2n)!}{(n1)! \cdot n!} Cn​(n1)!⋅n!(2n)!​ C语言实现卡特兰数 #include stdio.h// 计算阶乘 unsigned long long factorial(int n) {unsigned long long result 1;for (int i 1; i n; i) {result * i;}return result; }int numTrees(int n) {// 卡特兰数公式unsigned long long numerator factorial(2 * n); // (2n)!unsigned long long denominator factorial(n) * factorial(n 1); // (n1)! * n!return numerator / denominator; }int main() {int n 5; // 测试输入printf(Number of unique BSTs for n %d: %d\n, n, numTrees(n));return 0; }复杂度分析 时间复杂度 计算阶乘的时间复杂度为 O ( n ) O(n) O(n)整体复杂度为 O ( n ) O(n) O(n)。 空间复杂度 只使用常数空间复杂度为 O ( 1 ) O(1) O(1)。 示例解析 示例输入 n 3示例输出 Number of unique BSTs for n 3: 5对应的 5 种 BST 是 根节点 1右子树 [2, 3]。根节点 2左子树 [1]右子树 [3]。根节点 3左子树 [1, 2]。根节点 1右子树 [3]中间插入 2。根节点 3左子树 [2]中间插入 1。 总结 动态规划 是解决本题的核心思想通过状态转移方程逐步构造所有可能的 BST 个数。卡特兰数公式 是数学推导的简洁方法适合需要快速计算的场景。动态规划适合理解递归关系公式计算适合处理较大规模的输入。
http://www.zqtcl.cn/news/579233/

相关文章:

  • 网站设计 注意做筹款的网站需要什么资质
  • 家居网站建设费用国土局网站建设经验
  • 企业网站开发教程网站建设更改
  • 违法网站怎么做安全wordpress自定义应用
  • 四平英文网站建设wordpress添加特效
  • 如何在手机上制作网站企业网站 微博模块
  • 网站内容规范网站建设建设公司哪家好
  • 深圳网站制作公司地址如何制作手机版网站
  • 深圳定制网站制作报价网络交易平台
  • 鞍山网站制作报价wordpress手机客户端端
  • 开发触屏版网站标签苏州沧浪区做网站的
  • 网站接入商钓鱼网站链接怎么做
  • 建设部机关服务中心网站网站建设维护费 会计科目
  • 网站解析后怎么解决方法淘宝网站建设方案模板
  • 淘宝客可以自己做网站推广吗营销网络建设怎么写
  • 上海高端网站制作广告设计培训课程
  • 互联网站平台有哪些建筑工程教育网官网
  • 广告传媒公司哪家好职场seo是什么意思
  • 番禺龙美村做网站博山区住房和城乡建设局网站
  • 山东网站建设xywlcnwordpress如何创建导航
  • 直接用ip访问网站网站开发常用字体
  • 江西省城乡建设培训网 官方网站杭州十大软件公司
  • 建设网站需要什么设备南昌购物网站制作
  • 做家具的网站工作单位怎么填
  • 福州建设银行官网招聘网站山西建设公司网站
  • 集团网站建设方案中卫网站推广制作
  • 射阳网站建设电商运营团队结构图
  • 有没有女的做任务的网站计算机网站开发专业
  • 怎么样开始做网站网站建设 营业执照 经营范围
  • 威海做网站网站建设方案书 模版