zoukankan      html  css  js  c++  java
  • LeetCode——三角形最小路径和

    Q:
    给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字,
    例如,给出的三角形如下:
    [↵ [2],↵ [3,4],↵ [6,5,7],↵ [4,1,8,3]↵]
    最小的从顶部到底部的路径和是2 + 3 + 5 + 1 = 11。
    注意:
    如果你能只用O(N)的额外的空间来完成这项工作的话,就可以得到附加分,其中N是三角形中的行总数。
    A:
    min数组,复用一个长度triangle.size()大小的数组记录
    上一层元素的构成的小三角的最小路径和,状态转移方程
    f(i,j) = min(f(i+1, j)+triangle[i][j], f(i+1, j+1)+triangle[i][j])

        public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {
            if (triangle.isEmpty())
                return 0;
            int[] min = new int[triangle.size()];
            for (int i = 0; i < min.length; i++) {
                min[i] = triangle.get(triangle.size() - 1).get(i);
            }
            for (int i = triangle.size() - 2; i >= 0; i--) {
                for (int j = 0; j <= i; j++) {
                    min[j] = Math.min(min[j] + triangle.get(i).get(j), min[j + 1] + triangle.get(i).get(j));
                }
            }
            return min[0];
        }
    
  • 相关阅读:
    SDOI2016游戏
    李超线段树
    SDOI2016数字配对
    SDOI2016储能表
    ! JOISC2020DAY3星座3
    JOISC2020DAY2有趣的 Joitter 交友
    第十天学习内容 函数
    第九天学习内容 结构体
    第八天学习内容 集合
    第七天学习内容 数组
  • 原文地址:https://www.cnblogs.com/xym4869/p/12517753.html
Copyright © 2011-2022 走看看