博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 120.Triangle (三角形最小路径和)
阅读量:2179 次
发布时间:2019-05-01

本文共 1065 字,大约阅读时间需要 3 分钟。

题目描述:

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

例如,给定三角形:

[     [2],    [3,4],   [6,5,7],  [4,1,8,3]]

自顶向下的最小路径和为 11(即,3 + 1 = 11)。

说明:

如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。

 

AC C++ Solution:

 

DP算法:一维数组动态记录,迭代更新自身

 

“自下而上”DP非常简单:我们从底行的节点开始; 这些节点的最小路径是节点本身的值。从那里开始,第k行第i个节点的最小路径将是其两个子节点的路径中的较小者加上其自身的值,即:

minpath[k][i] = min( minpath[k+1][i], minpath[k+1][i+1]) + triangle[k][i];

因为在minpath [k]计算之后行minpath [k + 1]将无用,我们可以简单地将minpath设置为1D数组,并迭代更新自身:

For the kth level:minpath[i] = min( minpath[i], minpath[i+1]) + triangle[k][i];
class Solution {public:    int minimumTotal(vector
> &triangle) { vector
minNums = triangle[triangle.size() - 1]; //先将数组初始化为最后一行 for (int i = triangle.size() - 2; i > - 1; --i) //从倒数第二行计算 for (int j = 0; j <= i; ++j) //第i行就有i+1个元素 (行是从0开始计数) minNums[j] = (minNums[j] < minNums[j + 1] ? minNums[j] : minNums[j + 1]) //从两个子节点中选择小的,加上当前节点的值就是最小和 + triangle[i][j]; return minNums[0]; }};

 

 

 

 

转载地址:http://kgnkb.baihongyu.com/

你可能感兴趣的文章
夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
查看>>
夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理
查看>>
Java 未来行情到底如何,来看看各界人士是怎么说的
查看>>
IntelliJ 平台 2020 年路线图
查看>>
走进JavaWeb技术世界8:浅析Tomcat9请求处理流程与启动部署过程
查看>>
微软宣布加入 OpenJDK,打不过就改变 Java 未来!
查看>>
MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
查看>>
为什么强烈推荐 Java 程序员使用 Google Guava 编程!
查看>>
先搞清楚这些问题,简历上再写你熟悉Java!
查看>>
【数据库】关系数据库和非关系数据库的优缺点
查看>>
【数据结构】动态顺序表
查看>>
Markdown的基础使用
查看>>
Linux基础命令
查看>>
【C语言】交换两个数值的三种方法
查看>>
【数据结构】栈的简单理解以及对栈的基本操作
查看>>
【数据结构】简单不带环迷宫的实现(用栈实现)
查看>>
【C语言】简单的了解递归(求斐波那契,n的阶乘,字符串长度,把一个整型(无符号),转化为字符型并打印出来)
查看>>
【数据结构】动态栈的实现
查看>>
【数据结构】简单的迷宫(用递归实现)
查看>>
【数据结构】队列的基本认识和队列的基本操作
查看>>