leetcode654_最大二叉樹
阿新 • • 發佈:2022-03-06
題目連結:https://leetcode-cn.com/problems/maximum-binary-tree/
模擬題
class Solution { private int maxIndex(int[] nums) { int tmp = Integer.MIN_VALUE,idx =0; for(int i = 0; i < nums.length; i++) { if(nums[i] > tmp) { tmp = nums[i]; idx = i; } } return idx; } public TreeNode constructMaximumBinaryTree(int[] nums) { int len = nums.length; if(len == 0) return null; int idx = maxIndex(nums); TreeNode root = new TreeNode(nums[idx]); int[] leftNums={},rightNums={}; if(idx > 0) leftNums = Arrays.copyOfRange(nums, 0, idx); if(idx < len - 1) rightNums = Arrays.copyOfRange(nums, idx+1, len) ; root.left = constructMaximumBinaryTree(leftNums); root.right = constructMaximumBinaryTree(rightNums); return root; } }
但其實是思維的問題,Arrays.copyOfRange(nums, 0, idx);耗費了大量的時間,直接傳遞左右下標即可:
class Solution { public TreeNode constructMaximumBinaryTree(int[] nums) { if(nums.length == 0) return null; return traversal(nums, 0, nums.length); } private TreeNode traversal(int[] nums, int left, int right) { if(right <= left) { return null; } else if(left+1 == right) { TreeNode root = new TreeNode(nums[left]); return root; } else { int maxValue = nums[left], maxIdx = left; for(int i = left+1; i < right; i++) { if(nums[i] > maxValue) { maxValue = nums[i]; maxIdx = i; } } TreeNode root = new TreeNode(maxValue); root.left = traversal(nums, left, maxIdx); root.right = traversal(nums, maxIdx+1, right); return root; } } }
這樣就擊敗了88%的人,快多了。