题目分析
这个题目有一定的难度,首先肯定不能建树。我们要想明白不建树如何求解这个题目。题目的第二个信息非常重要,arr的值是中序遍历的节点值。那么以某个节点为根的叶子节点在数组中就必然是连续的,比如题目中的[6, 2, 4],那么[6]可以组成一个单独的子树,[2, 4]可以组成一个单独的子树。或者[6, 2]可以组成一个单独的子树,[4]可以组成一个单独的子树。唯独[6, 4]不能组成,因为中间跳跃了2。
这个题目有一定的难度,首先肯定不能建树。我们要想明白不建树如何求解这个题目。题目的第二个信息非常重要,arr的值是中序遍历的节点值。那么以某个节点为根的叶子节点在数组中就必然是连续的,比如题目中的[6, 2, 4],那么[6]可以组成一个单独的子树,[2, 4]可以组成一个单独的子树。或者[6, 2]可以组成一个单独的子树,[4]可以组成一个单独的子树。唯独[6, 4]不能组成,因为中间跳跃了2。
本题类似01背包问题,可以使用线性DP求解,用dp[i]表示前i个箱子需要的最少行程次数,那么可得dp[i] = Math.min(dp[i], dp[j - 1] + cost(j, i)),其中cost(j, i)表示用一辆车运送从j到i的箱子的花费。