LeetCode 120: Triangle
来源:互联网 发布:linux定时重启机器 编辑:程序博客网 时间:2024/06/04 18:20
Difficulty: 3
Frequency: 1
Problem:
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.
Solution:
1. Use O(n^2) extra space, where n is the total number of rows in the triangle.
class Solution {public: int minimumTotal(vector<vector<int> > &triangle) { // Start typing your C/C++ solution below // DO NOT write int main() function if (triangle.size()==0) return 0; if (triangle.size()==1) return triangle[0][0]; vector<vector<int> > pathSumTriangle (triangle); int i_minimum = 0; for (int i = 1; i<triangle.size(); i++) { for (int j = 0; j<triangle[i].size(); j++) { int i_left = j==0?0x7FFFFFFF:pathSumTriangle[i-1][j-1]; int i_right = (j==pathSumTriangle[i].size()-1)?0x7FFFFFFF:pathSumTriangle[i-1][j]; pathSumTriangle[i][j] += i_left<i_right?i_left:i_right; if (i==triangle.size()-1) { if (j==0) i_minimum = pathSumTriangle[i][j]; else i_minimum = i_minimum<pathSumTriangle[i][j]?i_minimum:pathSumTriangle[i][j]; } } } return i_minimum; }};
2. Use O(n) extra space.
class Solution {public: int minimumTotal(vector<vector<int> > &triangle) { // Start typing your C/C++ solution below // DO NOT write int main() function if (triangle.size()==0) return 0; if (triangle.size()==1) return triangle[0][0]; vector<int> pathSumTriangle (triangle.back()); int i_minimum = 0; pathSumTriangle[0] = triangle[0][0]; for (int i = 1; i<triangle.size(); i++) { pathSumTriangle[i] = pathSumTriangle[i-1] + triangle[i][i]; i_minimum = pathSumTriangle[i]; for (int j = i - 1; j>0; --j) { pathSumTriangle[j] = (pathSumTriangle[j]<pathSumTriangle[j-1]?pathSumTriangle[j]:pathSumTriangle[j-1]) + triangle[i][j]; if (i==triangle.size()-1) { i_minimum = i_minimum<pathSumTriangle[j]?i_minimum:pathSumTriangle[j]; } } pathSumTriangle[0] += triangle[i][0]; i_minimum = i_minimum<pathSumTriangle[0]?i_minimum:pathSumTriangle[0]; } return i_minimum; }
};
Notes:
- Leetcode 120 Triangle
- LeetCode 120: Triangle
- LeetCode(120)Triangle
- LeetCode: Triangle [120]
- LeetCode 120 Triangle
- LeetCode 120 Triangle
- [leetcode 120] Triangle
- [Leetcode 120, Medium] Triangle
- leetcode || 120、Triangle
- Triangle - LeetCode 120
- Leetcode[120]-Triangle
- LeetCode(120) Triangle
- Leetcode #120 Triangle
- [leetcode-120]Triangle(c++)
- leetcode 120: Triangle
- 【LeetCode】(120)Triangle (Medium)
- [leetcode] 120 Triangle
- LeetCode 120: Triangle
- Qpid
- Android取得程序包名及Activity信息
- 内核开发基础
- Hessian 原理分析
- [iOS]在运行时为类添加方法
- LeetCode 120: Triangle
- 基于FreeRTOS的队列管理的应用
- DML操作记录在UNDO中的信息(undo记录里包含了其对应的数据行的ROWID(并非直接记录,而是拼凑出来的))
- 返璞归真,忘掉NSUserDefaults
- 步步为营Hibernate全攻略(二)剪不断理还乱之:一对多关联映射
- 所见即所得:四款免编程移动游戏开发引擎推荐
- java 格式化
- 对网站文章标题的几点建议
- 解决VMware Workstation9 安装Ubuntu Desktop 12.04 LTS无法启动图形界面