LeetCode 120. Triangle (三角形最小路径和)详解
题目详情
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
说明:
如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。
解决代码(1)—— 空间复杂度为O(N^2)
解决思路
这个题目非常明显的动态规划问题, 当前节点的最小值由前面一层的一个(当为第一个或最后一个点)或两个节点决定, 所以维护一个二维数组,保存到达每个节点的最小路径值,通过递推式求出所有的点的最小路径值,然后返回最后一层的最小值就是目标值了
//递推式可以很容易看出
//中间点
minPath[i][j] = min(minPath[i-1][j-1] + triangle[i][j], minPath[i-1][j] + triangle[i][j]);
代码及注释
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
//minPath 表示走到当前点的最小路径
vector<vector<int>> minPath = triangle;
int n = triangle.size();
for (int i = 1; i < n; i++) {
for (int j = 0; j <= i; j++) {
//当计算节点是头结点或者尾节点时,走到此节点的路径只有一个
if (j == 0) {
minPath[i][j] = minPath[i - 1][j] + triangle[i][j];
} else if (j == i) {
minPath[i][j] = minPath[i - 1][j - 1] + triangle[i][j];
} else {
//当非头尾节点的时候, 走到节点的方式有两种
minPath[i][j] = min(minPath[i-1][j-1] + triangle[i][j], minPath[i-1][j] + triangle[i][j]);
}
}
}
//返回最后一层节点的最小路径的最小值 即目标值
return *min_element(minPath[n-1].begin(), minPath[n-1].end());
}
};
解决代码(二) 空间复杂度为O(N)
解决思路
题目给了提示, 可以优化到空间为O(N)
其实不需要存所有的点, 或者说有些点用完后就不会在用了, 比如我算第三层, 那么第一层的值就用不到了, 所以我们只需维护两个个大小为N数组 保存当前层和上一层就可以优化到O(N)了!
基本想法和解法1 相同, 就不给出代码了
解决代码(三)自底向上
解法二准确来说还是用了2个数组O(2N), 是否能用一个数组来解决问题呢?
解决思路
因为上一层的每个点到下一层都有两种方式,通过反推,由最后一层一直推到第一层。
有递推式
minPath[i] = 当前点值 + min(上一层的左边点值, 上一层的右边点值)
代码如下
class Solution {
public:
int minimumTotal(vector<vector<int> > &triangle)
{
vector<int> minPath= triangle[triangle.size()-1];
for ( int i = triangle.size() - 2; i>= 0 ; --i )
for ( int j = 0; j < triangle[i].size() ; ++ j )
minPath[j] = triangle[i][j] + min(minPath[j],minPath[j+1]);
return minPath[0];
}
};
```x
LeetCode 120. Triangle (三角形最小路径和)详解的更多相关文章
- LeetCode 120. Triangle三角形最小路径和 (C++)
题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...
- 120 Triangle 三角形最小路径和
给出一个三角形(数据数组),找出从上往下的最小路径和.每一步只能移动到下一行中的相邻结点上.比如,给你如下三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]] ...
- [算法]LeetCode 120:三角形最小路径和
题目描述: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和 ...
- LeetCode刷题: 【120】三角形最小路径和
1. 题目: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小 ...
- Leetcode120.Triangle三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和为 11 ...
- Java实现 LeetCode 120 三角形最小路径和
120. 三角形最小路径和 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...
- 领扣-120 三角形最小路径和 Triangle MD
三角形最小路径和 Triangle 数组 动态规划 问题 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [2], [3,4], [6,5,7], ...
- leetcode 120. 三角形最小路径和 及 53. 最大子序和
三角形最小路径和 问题描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...
- 1. 线性DP 120. 三角形最小路径和
经典问题: 120. 三角形最小路径和 https://leetcode-cn.com/problems/triangle/ func minimumTotal(triangle [][]int) ...
随机推荐
- vue : 项目起手式 - router组件通用模板
每次新建文件都要找来找去,麻烦,干脆贴到这里好了. <template> <div id="page"> </div> </templat ...
- vue : 本地调试跨域问题的解决办法:proxyTable
本来我是不想写的,但为了加深印象还是写一写吧. ./config/index.js module.exports = { dev: { // Paths assetsSubDirectory: 'st ...
- p73_万维网和HTTP协议
一.URL形式 URL不区分大小写 <协议>://<主机>:<端口>/<路径> 二.HTTP协议 HTTP协议定义了浏览器(万维网客户进程)怎样向万维网 ...
- Puppeteer爬虫实战(一)
Puppeteer 爬虫技术实践 信息简介 Puppeteer是Chrome开发团队发布的一个通过Chrome DevTool Protocol来控制浏览器Chrome(下文若无显式称呼Chromiu ...
- .Net、ASP.Net、C#、VisualStudio之间的关系是什么
.Net一般指的是.NetFramework,提供了基础的.Net类,这些类可以被任何一种.Net编程语言调 用,.NetFramework还提供了 CLR.JIT.GC等基础功能. ASP.Net是 ...
- 好用的npm模块记录
标签: node node盛行的今天,前端开发已经离不开npm模块的使用,大名鼎鼎的如gulp,webpack等,此处不多说,除了它们有那么几个常用的npm模块是我喜欢并依赖它的,下面就是我平时工作中 ...
- vue history路由模式 Nginx 生产实践
nginx(带二级目录的配置) location ~* /A { alias /opt/nginx-1.4.7/html/ued/A; try_files $uri $uri /A/s ...
- 微信小程序 springboot nginx 做图片存储 上传 浏览
微信小程序前端-springboot后端-nginx图片存储 前言 本人小白一名,这是第一次学习微信小程序,特此做个记录. 首先准备nginx做图片存储 选择一个地址存放图片 #我的地址 [root@ ...
- Huffuman树--------找最值学会用sort和cmp
问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. ...
- ES模糊查询来对应mysql的like查询
使用ES查询来对应mysql的like查询 建立一个测试索引 PUT /test_like1 { "mappings" : { "properties" : { ...