首页 > 其他分享 >96-Unique Binary Search Trees 二叉搜索树的数量

96-Unique Binary Search Trees 二叉搜索树的数量

时间:2024-05-22 22:51:25浏览次数:15  
标签:Binary Search int 个数 Trees 二叉 搜索 unique dp

问题描述

链接:https://leetcode.com/problems/unique-binary-search-trees/description/

Given an integer n, return the number of structurally unique BST's (binary search trees) which has exactly n nodes of unique values from 1 to n.

解释:
给定一个整数n,求1~n,n个整数组成的二叉搜索树的个数

基本思想

构造长度为n+1的动态数组dp,其中dp[i] 表示 以i为中心的二叉搜索树的个数。假设
1~i个数中,

  • 以1为为中心的,其左边有数0个,右边有树i-1个,所以以1为中心,i个数,可以构成二叉搜索树 dp[1]* dp[i-1]
  • 以2为中心,其左边有数1个,右边有树i-2个,可以构成二叉搜索树为 左边1个数可以构成的二叉搜索树 乘上 右边 i-2个数可以构成的二叉搜索树
  • ....
  • 以i为中心,其左边有 i-1个数,右边有1个数,可以构成二叉搜索树的个数为 dp[i-1] * dp[1]
    将上面结果依次叠加,即得到1~i个数构成的二叉搜索树的数目
    时间复杂度 \(O(n^2)\) 需要计算3+4+....n次乘法

代码

C++

    int numTrees(int n) {
        if(n<=1) return 1;
        if (n<=2) return 2;
        vector<int> dp(n+1,0);
        dp[0] = 1;
        dp[1] = 1;
        dp[2] = 2;
        for(int i=3;i<=n;++i) {
            int t = 0;
            for(int j=1;j<=i;++j) {
                t += dp[j-1] * dp[i-j];
            }
            dp[i] = t;
        }
        return dp[n];
    }

python

    def numTrees(self, n: int) -> int:
        if n <=0 : return 0
        if n<=1: return 1
        dp = [0] * (n+1)
        dp[0] = dp[1] = 1
        dp[2] = 2
        for i in range(3, n+1):
            for j in range(1,i+1):
              dp[i] += dp[j-1] * dp[i-j]
        return dp[n] 

标签:Binary,Search,int,个数,Trees,二叉,搜索,unique,dp
From: https://www.cnblogs.com/douniwanli/p/18207313

相关文章

  • Elasticsearch
    Elasticsearch全文搜索引擎-PHP使用教程。 1、声明依赖关系:        比方说,你的项目中需要一个php版的elasticsearch框架。为了将它添加到你的项目中(下载),你所需要做的就是创建一个composer.json文件,其中描述了项目的依赖关系。注意文件要放在你执行composer命令......
  • 一个使用Python加密连接Elasticsearch的简单封装
    依赖:elasticsearch==7.17.9eshelpercore.py:#!/usr/bin/python3#coding=utf-8importdatetimeimportosimportsslfromelasticsearchimportElasticsearchdefget_env()->str:#这里指定查询的环境索引return"uat"defget_output_file_pat......
  • elasticsearch存储经纬度且按照范围进行查询
    elasticsearch存储经纬度且按照范围进行查询背景:我在客户那边有很多舆情事件数据,数据里面包含的是有经纬度的,项目需求是用户在系统中输入一个地址,系统就可以查询到该地址100米500米1000米范围内的事件信息,当然了还可以输入事件的关键信息做模糊查询,所以我选择了使用es来存储......
  • ES(Elasticsearch)入门-深入索引操作
    1.创建索引使用PUT请求。结构PUT/${index_name}//索引名称{"settings":{...索引相关的配置项目,如何:分配个数副分片个数等},"mappings":{...数据的结构}}-----------------------------------实例---------------------------......
  • URLSearchParams:url查询处理工具
    letparams=newURLSearchParams(a=1&b=2&c=3#hash)方法和属性:.get('').has('')//返回true/false.append(name,value)//向URL中添加新的参数.set(name,value)//设置指定参数的值,如果参数不存在则添加新参数.delete(name)//删除指定名称的参数.key()......
  • 自动化部署elasticsearch三节点集群
    什么是Elasticsearch?Elasticsearch是一个开源的分布式搜索和分析引擎,构建在ApacheLucene的基础上。它提供了一个分布式多租户的全文搜索引擎,具有实时分析功能。Elasticsearch最初是用于构建全文搜索引擎,但它的功能已经扩展到包括日志分析、应用程序性能监控、地理信息系统等......
  • 《Object Detection Using ClusteringAlgorithm Adaptive Searching Regions in Aeria
    《ObjectDetectionUsingClusteringAlgorithmAdaptiveSearchingRegionsinAerialImages》论文10问Q1论文试图解决什么问题?小物体分布不均匀,主要问题是分辨率低、信息量小,导致特征表达能力弱;传统方法如放大图像,会增加处理时间和存储大型特征图所需的内存,图像统一均匀裁......
  • INFINI Labs 产品更新 | Easysearch 1.8.0 发布数据写入限流功能
    INFINILabs产品又更新啦~,包括Easysearchv1.8.0、Gateway、Console、Agent、Loadgenv1.25.0。本次各产品更新了很多亮点功能,如Easysearch新增数据写入限流功能,可实现节点、分片级限流;Gateway修复数据迁移过程中因消费不及时解压缩导致部分数据记录损坏而丢失记录问题,进一......
  • 查找 Search
    这道题目肯定是考虑维护前驱了(注意不用前驱后继都维护)但是注意,这里的前驱定义为位置\(i\)前面第一个与\(i\)加起来为\(w\)的位置然后就会出现这篇题解所说的情况这篇题解也给了解决方案,由贪心易证,就是注意此时一定不要超时了所有影响的位置:千万不要把相加为\(w\)的位置弄掉......
  • 《RandAugment: Practical automated data augmentation with a reduced search space
    论文标题《RandAugment:Practicalautomateddataaugmentationwithareducedsearchspace》随机增强:缩小搜索空间的实用自动数据扩增技术作者EkinD.Cubuk、BarretZoph、JonathonShlens和QuocV.Le来自GoogleResearch,BrainTeam初读摘要最近的研究表明,数......