标签:triangle int 复杂度 路径 -- LeetCode120 三角形 dp
【举一反三】:最大路径和——数字三角形问题(动态规划)
☆☆☆思路:动态规划 ——> 空间优化(使用一维数组而不是二维数组,这样只使用了O(n)的额外空间。)
class Solution { public int minimumTotal(List<List<Integer>> triangle) { /** * 方法1:DP 时间复杂度和空间复杂度 都是O(n^2) */ /* int m = triangle.size(); // 1. 状态的定义:dp[i][j]表示从点(i,j)到底边的最小路径和 int[][] dp = new int[m + 1][m + 1]; // 从三角形的最后一行开始递推。 for (int i = m - 1; i >= 0; i--) { for (int j = 0; j <= i; j++) { // 2. 状态转移方程 dp[i][j] = Math.min(dp[i+1][j], dp[i+1][j+1]) + triangle.get(i).get(j); } } return dp[0][0]; */ /** * 方法2:DP + 空间优化, 仅使用一维数组. 时间复杂度O(n^2),空间复杂度O(n) * 由于递推中,计算dp[i][j]时,只用到了下一行的dp[i+1][j]和dp[i+1][j+1]。 * 而不需要记录整个层的结果,因此dp数组不需要定义N行,只需要一行即可。 */ int m = triangle.size(); int[] dp = new int[m + 1]; for (int i = m-1; i >= 0; i--) { for (int j = 0; j <= i; j++) { dp[j] = Math.min(dp[j], dp[j+1]) + triangle.get(i).get(j); } } return dp[0]; } }
标签:triangle,int,复杂度,路径,--,LeetCode120,三角形,dp 来源: https://www.cnblogs.com/HuangYJ/p/14213728.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。