题目:

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[];
}
};

最新文章

  1. 解析Java类和对象的初始化过程
  2. 修复一个吉日嘎拉MSSQL数据库版中的分页存储过程bug
  3. spring(4)——自动装配
  4. ACM3 求最值
  5. LVS NAT模式
  6. 【uTenux实验】信号量
  7. ICursor查询后的排序问题
  8. flask剖析
  9. [Android] Service和IntentService中显示Toast的区别
  10. MongoDB 安装(一)
  11. SVNserver的本地搭建和使用
  12. 青客宝redis内部分享ppt
  13. springcloud(一):大话Spring Cloud
  14. 修改或隐藏Nginx的版本号
  15. nginx重写rewrite的[emerg] unknown directive
  16. 关系型数据库 VS 非关系型数据库
  17. 未将对象引用设置到对象的实例 IIS
  18. 【Unity笔记】打包安卓APK时Build Setting中的三种Build System
  19. 浅谈IM软件client的断线重连、心跳和长在线
  20. 使用MyGeneration创建模板:介绍(翻译)

热门文章

  1. CF1204D Kirk and a Binary String
  2. es6的map()方法解释
  3. HBase的java操作,最新API。(查询指定行、列、插入数据等)
  4. python每日学习2018/1/14(python之禅)
  5. 使用角色管理工具 安装或配置microsoft.net framework 3.5 sp1
  6. Centos下mysql8忘记root密码的解决办法
  7. ASP.NET Core MVC 之依赖注入 View
  8. 避免HBase PageFilter踩坑,这几点你必须要清楚
  9. CSS3特效之转化(transform)和过渡(transition)
  10. 设计模式之(十)装饰模式(DECORATOR)