首页 > 编程语言 >10.7算法

10.7算法

时间:2023-10-07 11:23:16浏览次数:38  
标签:begin TreeNode 10.7 nums sortedArrayToBSTHelper mid 算法 root

将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

 

示例 1:


输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

示例 2:


输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
 

提示:

1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 按 严格递增 顺序排列
相关标签

C++

 

TreeNode* sortedArrayToBSTHelper(vector<int>& nums,int begin,int end){     if(begin > end){         return nullptr;     }     int mid = (begin + end) >> 1;     TreeNode* root = new TreeNode(nums[mid]);     root->left = sortedArrayToBSTHelper(nums,begin,mid-1);     root->right = sortedArrayToBSTHelper(nums,mid+1,end);     return root; }

TreeNode* sortedArrayToBST(vector<int>& nums) {     if(nums.size() == 0){         return nullptr;     }     return sortedArrayToBSTHelper(nums,0,nums.size()-1);
}   关键: 1.需要二分递归处理问题,设置好递归边界 2.     TreeNode* root = new TreeNode(nums[mid]);     root->left = sortedArrayToBSTHelper(nums,begin,mid-1);     root->right = sortedArrayToBSTHelper(nums,mid+1,end); 这一段设置为指针,分配空间的形式,避免生成局部变量无法复用

标签:begin,TreeNode,10.7,nums,sortedArrayToBSTHelper,mid,算法,root
From: https://www.cnblogs.com/minipython-wldx/p/17745851.html

相关文章

  • ATPG的D算法介绍
    ATPG算法实现测试向量自动化生成的算法,其中包含D算法、PODEM算法和FAN算法等。D算法为测试某一节点单固定故障,将其故障信息传递反映到输出中体现出来,我们把用穷举得出正确路径的方法称之为D算法。每个节点分为四种状态,1、0、X、D和D(-)。其中,X为0或1,意思是该节点值不影响最终......
  • 聊聊前端算法复杂度
    算法复杂度前端开发一般:重时间轻空间什么是复杂度程序执行时需要的计算量和内存空间(和代码简洁度无关)复杂度是数量级,不是具体的数字一般针对一个具体的算法,而非一个完整的系统时间复杂度程序执行时需要的计算量(cpu)O(1)一次就够"可数的",和输入量无关,无论输入量......
  • manacher 回文串处理算法
    忘了具体什么时候写的,应该是2023.8初这算是个算法复习,因为我太菜了以前学的都不会了。manacher回文串处理算法其实这个我已经看两天了却一直没有看懂,觉得自己很愚笨,结果发现是自己一直不想去理解吧,然后今天仔细研究了以后发现就是那么个东西,没有什么很深奥的东西,那就自己整......
  • 10 对比不同的优化算法
    importnumpyasnpimportmatplotlib.pyplotaspltimportscipy.ioimportmathimportsklearnimportsklearn.datasetsfromopt_utilsimportload_params_and_grads,initialize_parameters,forward_propagation,backward_propagationfromopt_utilsimportcomp......
  • 【算法】国庆加班,火锅与Linq.AddRange的奇妙螺旋
    在国庆假期的一个傍晚,小悦正在家中享受火锅美食。她嘴里咀嚼着鲜嫩的牛肉,脸上洋溢着满足的微笑。突然,手机铃声响起,打破了这温馨的氛围。她拿起手机一看,是公司打来的电话。“小悦,有个紧急的项目需要处理,你能来公司加一下班吗?”电话那头传来领导焦急的声音。小悦顿时嘟起嘴,不太情......
  • 扩展欧几里得算法
    算法阅读此篇前可先阅读欧几里得算法。给定\(a,b,s\),求\(ax+by=s\)的任意一组解。证明:由裴蜀定理得:二元一次方程\(ax+by=c\)的有解条件是\(\gcd(a,b)\midc\)。由欧几里得算法得知\(\gcd(a,b)=\gcd(b,a\modb)\)假设我们求出了\(\gcd(b,a\modb)\)的两个解\((x'......
  • 算法性能分析
       1.究竟什么是时间复杂度时间复杂度是一个函数,它定性描述该算法的运行时间。假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为O(f(n))2.什么是大O......
  • 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
    五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。文心一言:在G......
  • 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
    五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。文心一言:在Go......
  • 算法异或的运用
    题目描述在一条无限长的路上,有一排无限长的路灯,编号为1,2,3,4,…。每一盏灯只有两种可能的状态,开或者关。如果按一下某一盏灯的开关,那么这盏灯的状态将发生改变。如果原来是开,将变成关。如果原来是关,将变成开。在刚开始的时候,所有的灯都是关的。小明每次可以进行如下的操作:指......