Leetcode 1228 Solution

This article provides solution to leetcode question 1228 (minimum-cost-tree-from-leaf-values)

https://leetcode.com/problems/minimum-cost-tree-from-leaf-values

Solution

class Solution: def mctFromLeafValues(self, arr: List[int]) -> int: dp = [[0] * len(arr) for _ in range(len(arr))]
for i in range(len(arr) - 1, -1, -1): for j in range(i, len(arr)): if i == j: continue
left_max = [0] * (j - i + 1) right_max = [0] * (j - i + 1)
curr_max = 0 for k in range(len(left_max)): curr_max = max(curr_max, arr[k + i]) left_max[k] = curr_max
curr_max = 0 for k in reversed(range(len(left_max))): curr_max = max(curr_max, arr[k + i]) right_max[k] = curr_max
opt = sys.maxsize for k in range(i, j): opt = min(opt, dp[i][k] + dp[k + 1][j] + left_max[k - i] * right_max[k - i + 1]) dp[i][j] = opt
return dp[0][len(arr) - 1]