什么是正则化,L1和L2正则化是什么?
2026/6/2 4:00:55
654. 最大二叉树
给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:
nums中的最大值。返回nums构建的最大二叉树。
示例 1:
输入:nums = [3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]解释:递归调用如下所示: - [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。 - [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。 - 空数组,无子节点。 - [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。 - 空数组,无子节点。 - 只有一个元素,所以子节点是一个值为 1 的节点。 - [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。 - 只有一个元素,所以子节点是一个值为 0 的节点。 - 空数组,无子节点。
示例 2:
输入:nums = [3,2,1]输出:[3,null,2,null,1]
提示:
1 <= nums.length <= 10000 <= nums[i] <= 1000nums中的所有整数互不相同根据题目描述,我们很容易会想到通过递归的方式对本题进行解答。因为无论是拆分出来左子数组还是右子数组,那么对于子数组的操作,依然都是一样的逻辑。算是分冶的思想。因此使用递归就比较简单。只需要构建当前最大值即可,然后将左右侧的数组继续递归。
以下为java实现代码。
public static void main(String[] args) { int[] nums = {3,2,1,6,0,5}; System.out.println(constructMaximumBinaryTree(nums)); } public static TreeNode constructMaximumBinaryTree(int[] nums){ if (nums.length == 0){ return null; } int max = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] > nums[max]){ max = i; } } TreeNode res = new TreeNode(nums[max]); int[] left = Arrays.copyOfRange(nums, 0, max); int[] right = Arrays.copyOfRange(nums, max + 1, nums.length); res.left = constructMaximumBinaryTree(left); res.right = constructMaximumBinaryTree(right); return res; }以上为记录分享用,代码较差请见谅。