在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Given an array
Among all possible binary trees considered, return the smallest possible sum of the values of each non-leaf node. It is guaranteed this sum fits into a 32-bit integer. Example 1: Input: arr = [6,2,4] Output: 32 Explanation: There are two possible trees. The first has non-leaf node sum 36, and the second has non-leaf node sum 32. 24 24 / \ / \ 12 4 6 8 / \ / \ 6 2 2 4 Constraints:
给你一个正整数数组
在所有这样的二叉树中,返回每个非叶节点的值的最小可能总和。这个和的值是一个 32 位整数。 示例: 输入:arr = [6,2,4] 输出:32 解释: 有两种可能的树,第一种的非叶节点的总和为 36,第二种非叶节点的总和为 32。 24 24 / \ / \ 12 4 6 8 / \ / \ 6 2 2 4 提示:
12ms
1 class Solution { 2 func mctFromLeafValues(_ arr1: [Int]) -> Int { 3 guard arr1.count > 0 else { return 0 } 4 guard arr1.count > 1 else { return arr1[0] } 5 6 var arr = [Int.max] 7 arr.append(contentsOf: arr1) 8 arr.append(Int.max) 9 var sum = 0 10 while arr.count > 4 { 11 var mn = arr[1] 12 var idx = 1 13 for i in stride(from: 2, to: arr.count-1, by: 1) { 14 if mn > arr[i] { 15 mn = arr[i] 16 idx = i 17 } 18 } 19 var toMultiply = arr[idx-1] > arr[idx+1] ? arr[idx+1] : arr[idx-1] 20 sum += mn * toMultiply 21 arr.remove(at: idx) 22 } 23 24 return sum + arr[1] * arr[2] 25 } 26 } 20ms 1 class Solution { 2 func mctFromLeafValues(_ arr: [Int]) -> Int { 3 var solution = 0 4 var currentArray = arr 5 6 while currentArray.count > 1 { 7 let nextIndex = currentArray.firstIndex(of: currentArray.min()!)! 8 9 if nextIndex > 0 && nextIndex < currentArray.count - 1 { 10 solution += currentArray[nextIndex] * 11 min(currentArray[nextIndex-1], currentArray[nextIndex+1]) 12 } else { 13 solution += currentArray[nextIndex] * 14 (nextIndex == 0 ? currentArray[nextIndex+1] : currentArray[nextIndex-1]) 15 } 16 17 currentArray.remove(at: nextIndex) 18 } 19 20 21 return solution 22 } 23 } Runtime: 36 ms Memory Usage: 20.9 MB
1 class Solution { 2 func mctFromLeafValues(_ arr: [Int]) -> Int { 3 var dp:[[Int]] = [[Int]](repeating:[Int](repeating:0,count:45),count:45) 4 var maxn:[[Int]] = [[Int]](repeating:[Int](repeating:0,count:45),count:45) 5 var n:Int = arr.count 6 for i in 0..<n 7 { 8 maxn[i][i] = arr[i] 9 for j in (i + 1)..<n 10 { 11 maxn[i][j] = max(maxn[i][j - 1], arr[j]) 12 } 13 } 14 for d in 2...n 15 { 16 var i:Int = 0 17 while(i + d - 1 < n) 18 { 19 var j:Int = i + d - 1 20 dp[i][j] = (1<<60) 21 for k in i..<j 22 { 23 dp[i][j] = min(dp[i][j],maxn[i][k] * maxn[k+1][j] + dp[i][k] + dp[k + 1][j]) 24 } 25 i += 1 26 } 27 } 28 return (dp[0][n - 1]) 29 } 30 }
|
请发表评论