LeetCode 120. Triangle三角形最小路径和 (C++)
题目:
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
For example, given the following triangle
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
The minimum path sum from top to bottom is 11
(i.e., 2 + 3 + 5 + 1 = 11).
Note:
Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
分析:
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
从最底层往上去找,开辟一个二维数组res,其中res[i][j]记录到达该点时,最小的路径和,状态转移方程是res[i][j] = min(res[i+1][j]+triangle[i][j], res[i+1][j+1]+triangle[i][j]),也就是到达这个位置的最小路径和,等于当前的值加上下一层相邻的最小路径和的较小的值,值得注意的是,数组的形式实际是如下的:
[2],
[3,4],
[6,5,7],
[4,1,8,3]
而不是看起来那样的三角形,注意索引就好。
题中说使用 O(n) 的额外空间,一旦理解了这道题的思路,就很容易做了,开辟一个大小为三角形行数大小的数组,每一次状态更新时,在数组中更新就好。
res[j] = min(res[j]+triangle[i][j], res[j+1]+triangle[i][j]);
程序:
//O(n^2) space
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int m = triangle.size();
vector<vector<int>> res(m+, vector<int>(m+, ));
//res[i][j] = min(res[i+1][j]+triangle[i][j], res[i+1][j+1]+triangle[i][j])
for(int i = m-; i >= ; --i)
for(int j = ; j < triangle[i].size(); ++j)
res[i][j] = min(res[i+][j]+triangle[i][j], res[i+][j+]+triangle[i][j]);
return res[][];
}
};
//O(n) space
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int m = triangle.size();
vector<int> res(m+, );
//res[j] = min(res[j]+triangle[i][j], res[j+1]+triangle[i][j])
for(int i = m-; i >= ; --i)
for(int j = ; j < triangle[i].size(); ++j)
res[j] = min(res[j]+triangle[i][j], res[j+]+triangle[i][j]);
return res[];
}
};
最新文章
- 解析Java类和对象的初始化过程
- 修复一个吉日嘎拉MSSQL数据库版中的分页存储过程bug
- spring(4)——自动装配
- ACM3 求最值
- LVS NAT模式
- 【uTenux实验】信号量
- ICursor查询后的排序问题
- flask剖析
- [Android] Service和IntentService中显示Toast的区别
- MongoDB 安装(一)
- SVNserver的本地搭建和使用
- 青客宝redis内部分享ppt
- springcloud(一):大话Spring Cloud
- 修改或隐藏Nginx的版本号
- nginx重写rewrite的[emerg] unknown directive
- 关系型数据库 VS 非关系型数据库
- 未将对象引用设置到对象的实例 IIS
- 【Unity笔记】打包安卓APK时Build Setting中的三种Build System
- 浅谈IM软件client的断线重连、心跳和长在线
- 使用MyGeneration创建模板:介绍(翻译)
热门文章
- CF1204D Kirk and a Binary String
- es6的map()方法解释
- HBase的java操作,最新API。(查询指定行、列、插入数据等)
- python每日学习2018/1/14(python之禅)
- 使用角色管理工具 安装或配置microsoft.net framework 3.5 sp1
- Centos下mysql8忘记root密码的解决办法
- ASP.NET Core MVC 之依赖注入 View
- 避免HBase PageFilter踩坑,这几点你必须要清楚
- CSS3特效之转化(transform)和过渡(transition)
- 设计模式之(十)装饰模式(DECORATOR)