LeetCode刷题: 【120】三角形最小路径和
1. 题目:
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
说明:
如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。
2. 解题思路
从第一层到最后一层,每层中元素[i, j]的相邻父元素为[i -1, j - 1]与[i -1, j ],
参考图论中的Dijkstra算法,采取从顶点开始向外搜索,计算到达各节点的最短路径的方法;
由于题目中的图(树?)每层间都是单向的,所以不必每次循环更新所有节点的最短路径,只需从顶层开始逐层计算从顶点到各节点的最短距离,并直接更新到该节点,最后从最底层取出值最小的元素即为题解:
3. 代码 JAVA
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
int i = 0, j = 0;// 循环变量(为节省空间所以单独定义)
int pe, af;// 暂存父节点值
// 逐层计算最短路径,第一层不必计算
for (i = 1; i < triangle.size(); i++) {
// 每行第一个元素只有一个父元素
triangle.get(i).set(0, triangle.get(i - 1).get(0) + triangle.get(i).get(0));
for (j = 1; j < i; j++) {
pe = triangle.get(i - 1).get(j);
af = triangle.get(i - 1).get(j - 1);
if (pe < af)// 将较小的父元素加到当前节点,更新最短路径
triangle.get(i).set(j, pe + triangle.get(i).get(j));
else
triangle.get(i).set(j, af + triangle.get(i).get(j));
}
// 每行最后一个元素只有一个父元素
triangle.get(i).set(i, triangle.get(i - 1).get(i - 1) + triangle.get(i).get(i));
}
// 取出最后一层中最小的路径
return Collections.min(triangle.get(triangle.size() - 1));
}
}
最优提交结果:
执行用时 : 7 ms, 在Triangle的Java提交中击败了53.31% 的用户
内存消耗 : 35.1 MB, 在Triangle的Java提交中击败了96.99% 的用户

之后每次重新提交结果都不一样,不知道为啥
4. 复杂度
我自认为空间复杂度为 O(1)
时间复杂度:O(n^2)
LeetCode刷题: 【120】三角形最小路径和的更多相关文章
- Java实现 LeetCode 120 三角形最小路径和
120. 三角形最小路径和 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...
- 1. 线性DP 120. 三角形最小路径和
经典问题: 120. 三角形最小路径和 https://leetcode-cn.com/problems/triangle/ func minimumTotal(triangle [][]int) ...
- leetcode 120. 三角形最小路径和 及 53. 最大子序和
三角形最小路径和 问题描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...
- 领扣-120 三角形最小路径和 Triangle MD
三角形最小路径和 Triangle 数组 动态规划 问题 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [2], [3,4], [6,5,7], ...
- leetcode 120. 三角形最小路径和 JAVA
题目: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和 ...
- LeetCode 120——三角形最小路径和
1. 题目 2. 解答 详细解答方案可参考北京大学 MOOC 程序设计与算法(二)算法基础之动态规划部分. 从三角形倒数第二行开始,某一位置只能从左下方或者右下方移动而来,因此,我们只需要求出这两者的 ...
- LeetCode 120. 三角形最小路径和(Triangle)
题目描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径 ...
- LeetCode 刷题笔记 155. 最小栈(Min Stack)
tag: 栈(stack) 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素 ...
- C#LeetCode刷题之#62-不同路径(Unique Paths)
目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3680 访问. 一个机器人位于一个 m x ...
- C#LeetCode刷题之#63-不同路径 II(Unique Paths II)
目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3682 访问. 一个机器人位于一个 m x ...
随机推荐
- 2019Android阿里&腾讯&百度&字节面试汇总(附面试题总结、Android书单)
1.基本情况 先简单说说我今年的面试经历吧,本人2018届211软件工程硕士生,Android开发岗.此文主要是2019年年初春招的面试和秋招面试经验汇总,最终拿到了阿里,腾讯,字节跳动,百度等off ...
- 使用Angular2+的内置管道格式化数据
在简书看到一篇关于Angualr运用内置管道格式化数据的总结,感觉挺实用的,转载一下以供参考: [转载]https://www.jianshu.com/p/a8bd5a1d2c53 PS:管道是在HT ...
- 【五一qbxt】day4 数论知识
这些东西大部分之前都学过了啊qwq zhx大概也知道我们之前跟着他学过这些了qwq,所以: 先讲新的东西qwq:(意思就是先讲我们没有学过的东西) 进制转换 10=23+21=1010(2) =32+ ...
- Link-Cut-Tree学习(LCT)
Link-Cut-Tree学习(LCT) 真不敢想象我居然学会LCT了,但是我仍然不想写一篇博客来梳理 我怕一梳理自己又不懂了 但是作为一名朴实沉毅的cjoier,我决定小小的梳理一下,并不打算很精致 ...
- 物流运输(最短路+dp)
这道题是相当的火,但是在tyher的讲解下我一遍就AC了!!! Part 1 理解题目 从第一天到最后一天,总会有一些点莫名其妙地走不了,所以导致我们不能按照上一次的最短路一直运输得到最少费用,而需要 ...
- 9、numpy——数组操作
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: (1)修改数组形状 (2)翻转数组 (3)修改数组维度 (4)连接数组 (5)分割数组 (6)数组元素的添加与删除 1.修改数组形状 函 ...
- 为什么MySQL索引要使用 B+树,而不是其它树形结构?
作者:李平 https://www.cnblogs.com/leefreeman/p/8315844.html 一个问题? InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万 为 ...
- Redis和Ehcached的区别
Redis 属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵.因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的 ...
- Linux系统基于fork()新进程的创建
作者:严哲璟 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 fork属于系 ...
- tracert显示为超时
1.那一跳禁PING2.那一跳不对TTL超时做响应处理,直接丢弃3.MPLS VPN网络