funcwidthOfBinaryTree(root *TreeNode)int { deepleft := make([]int, 0) deepright := make([]int, 0) var f func(root *TreeNode, deep int, now int) f = func(root *TreeNode, deep int, now int) { if root == nil { return } iflen(deepleft) <= deep { deepleft = append(deepleft, now) deepright = append(deepright, now) } elseif deepleft[deep] > now { deepleft[deep] = now } elseif deepright[deep] < now { deepright[deep] = now } f(root.Left, deep+1, 2*now-1) f(root.Right, deep+1, 2*now) } f(root, 0, 1) max := -1 for i := 0; i < len(deepleft); i++ { if deepright[i]-deepleft[i] > max { max = deepright[i] - deepleft[i] } } return max + 1 }
funcpreimageSizeFZF(k int)int { test := make([]int, 0) i := 1 for i < k { test = append(test, i) i = i*5 + 1 } fivelen := len(test) i = fivelen - 1 for k > 0 { if k == 5*test[i] { return0 } for k >= test[i] { k -= test[i] } i-- } return5 }
review
纯数学题,分析时间比较长代码简单,但写表述好难感觉没说到点上。
220829
daily-1470.重新排列数组(algorithms Easy)
分析
比较简单,参数还多给一个n,乱跑。
代码块
1 2 3 4 5 6 7 8
funcshuffle(nums []int, n int) []int { ans := make([]int, n*2) for i := 0; i < n; i++ { ans[2*i] = nums[i] ans[2*i+1] = nums[n+i] } return ans }
funcinsertIntoMaxTree(root *TreeNode, val int) *TreeNode { a := maxTreeToSlice(root) b := append(a, val) return constructMaximumBinaryTree(b) }
funcmaxTreeToSlice(root *TreeNode) []int { ans := []int{} if root == nil { return ans } ans = append(maxTreeToSlice(root.Left), root.Val) ans = append(ans, maxTreeToSlice(root.Right)...) return ans }
funcconstructMaximumBinaryTree(nums []int) *TreeNode { iflen(nums) == 0 { returnnil } best := 0 for i, num := range nums { if num > nums[best] { best = i } } return &TreeNode{nums[best], constructMaximumBinaryTree(nums[:best]), constructMaximumBinaryTree(nums[best+1:])} }
funclongestUnivaluePath(root *TreeNode)int { var f func(root *TreeNode)int max := 0 f = func(root *TreeNode)int { if root == nil { return0 } left := f(root.Left) right := f(root.Right) if root.Left == nil || root.Left.Val != root.Val { left = 0 } if root.Right == nil || root.Right.Val != root.Val { right = 0 } if left+right > max { max = left + right } if left > right { return left + 1 } else { return right + 1 } } f(root) return max }