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];
        }
    
  • 相关阅读:
    office的高级应用
    python基础
    maven 资源导出失败问题
    单向环形链表和约瑟夫问题
    JDBC连接MySQL
    环形队列
    稀疏数组
    数据库锁机制和事务隔离级别总结
    context的简单应用
    JDBC基本使用方法
  • 原文地址:https://www.cnblogs.com/xym4869/p/12517753.html
Copyright © 2011-2022 走看看