题解 | #三角形最小路径和#

三角形最小路径和

https://www.nowcoder.com/practice/c9d44b73dc7c4dbfa4272224b1f9b42c

总结:
使用动态规划解决,空间复杂度可以优化,从n^2,2n,n。参考如下:
https://leetcode.cn/problems/triangle/solution/san-jiao-xing-zui-xiao-lu-jing-he-by-leetcode-solu/

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param triangle int整型二维数组 
     * @return int整型
     */
    public int minTrace (int[][] triangle) {
        // write code here
        //方法一使用空间n^2
//         int n = triangle.length;
//         int[][] dp = new int[n][n];
//         dp[0][0] = triangle[0][0];
//         for(int i=1;i<n;i++){
//             for(int j=0;j<=i;j++){
//                 if(j==0)
//                     dp[i][j]=dp[i-1][j]+triangle[i][j];
//                 else if(j==i)
//                     dp[i][j] = dp[i][j-1]+triangle[i][j];
//                 else
//                     dp[i][j] = Math.min(dp[i-1][j],dp[i-1][j-1])+triangle[i][j];
//             }
//         }
//         int min = dp[n-1][0];
//         for(int i=1;i<n;i++)
//             min = Math.min(min,dp[n-1][i]);
//         return min;
        //方法二 空间复杂度2n
//         int n = triangle.length;
//         int[][] f = new int[2][n];
//         f[0][0] = triangle[0][0];
//         int index = 0;
//         for(int i=1;i<n;i++)
//             for(int j=0;j<=i;j++){
//                 if((i&1)==1)
//                     index = 1;
//                 else
//                     index = 0;
//                 if(j==0)
//                     f[index][j] = f[1-index][j]+triangle[i][j];
//                 else if(j==i)
//                     f[index][j] = f[1-index][j-1]+triangle[i][j];
//                 else
//                     f[index][j] = Math.min(f[1-index][j],f[1-index][j-1])+triangle[i][j];

//             }
//         if(((n-1)&1)==0)
//             index = 0;
//         else 
//             index = 1;
//         int min = f[index][0];
//         for(int i=1;i<n;i++)
//             min = Math.min(min,f[index][i]);
//         return min;
        //方法三 空间复杂度n
        int n = triangle.length;
        int[] f= new int[n];
        f[0] = triangle[0][0];
        for(int i=1;i<n;i++)
            for(int j=i;j>=0;j--){
                if(j==0)
                    f[j] = f[j]+triangle[i][j];
                else if(j==i)
                    f[j] = f[j-1]+triangle[i][j];
                else
                    f[j] = Math.min(f[j],f[j-1])+triangle[i][j];
            }
        int min = f[0];
        for(int i=1;i<n;i++){
            min = Math.min(min,f[i]);
        }
        return min;

    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 17:28
25届每天都在焦虑找工作的事情0offer情绪一直很低落硬撑着面了一个岗位岗位有应酬的成分面试的时候hr给我出各种场景题问的问题比较犀利&nbsp;有点压力面的感觉感觉有点回答不上来本来就压抑的情绪瞬间爆发了呢一瞬间特别想哭觉得自己特别没用没绷住掉眼泪了事后想想觉得自己挺有病的&nbsp;真的破大防了
喜欢唱跳rap小刺猬...:我觉得没关系吧,之前有一次面试leader给我压力面,我顶住了压力,结果入职的时候发现组里氛围很差,果断跑路。其实从面试就能大概看出组的情况,面试体验好的组倒是不一定好,但是面试体验不好的组。。。就很难说
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
投递长鑫存储等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务