算法练习
654号题目
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
给出一个例子
输入: [3,2,1,6,0,5]
输入: 返回下面这棵树的根节点
6
/
3 5
\ /
2 0
1
1 温习下二叉树的概念
二叉树是一种基本的树结构,二叉树的每个节点最多有两个孩子。
2 参考解题思路
python中有max()函数,参数为一个list,可以求这个list中最大的数。
nums是我们的输入数组[3,2,1,6,0,5]。那么树的根肯定就是“6”了。接下来以“6”为界限,把数组分成两个:[3,2,1]和[0,5]。那么[3,2,1]整体就在6的左边,[0,5]整体就在6的右边。
我们先看[3,2,1]这个list。又要重新用max函数,得到此刻数组的最大值“3”。以“3”为分界点再分成两个数组,[]和[2,1]。此时我们可以看出“3”左边已经没有东西了,所以“3”的左子树为null.右边的[2,1]继续分解。[2,1]最大的数是“2”,“2”的左边没有数了,所以“2”的左子树为null,右子树为“1”。“1”的左右都是null。
[0,5]这个list与上面的原理相同。经过这些分析之后,我们就可以得到上面的那个树。
原文:https://blog.csdn.net/memoryjdch/article/details/78284907
class Solution(object):
def constructMaximumBinaryTree(self, nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
if not nums:
return None
root = TreeNode(max(nums))
root.left = self.constructMaximumBinaryTree(nums[:nums.index(root.val)])
root.right = self.constructMaximumBinaryTree(nums[nums.index(root.val)+1:])
---------------------
作者:家养家养
来源:CSDN
原文:https://blog.csdn.net/qq_32424059/article/details/87020585
英文阅读
git工作流中的gitlab工作流的官方文档 ,涉及到gitlab工作流的介绍和一些常用的操作建议。
原文地址https://docs.gitlab.com/ee/workflow/gitlab_flow.html
技巧呈现
本篇文章主要介绍数据集设计中的分桶范式以及使用实例。
桶型范式文章分享
本文介绍了ThinkPHP和YII2两个框架中对于redis的典型使用场景,通过连接数偏高的现象引出了长连接与短连接的概念,并且简单描述了几种网络连接状态,包括TIME_WAIT,ESTABLISHED,同时介绍了应用开发中Socket与TCP UDP的关联关系。
Redis连接数为何会偏高
参考资料
网友评论