leetcode_question_120 Triangle
来源:互联网 发布:innisfree 男士淘宝 编辑:程序博客网 时间:2024/05/16 10:30
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.
dp:
2-dimension array, O(n^2) extra space
int minimumTotal(vector<vector<int> > &triangle) { // Start typing your C/C++ solution below // DO NOT write int main() function int row = triangle.size(); int col = triangle[row-1].size(); int ** dp = new int*[row]; for(int i = 0; i < row; i++) dp[i] = new int[col]; dp[0][0] = triangle[0][0]; for(int i = 1; i < row; ++i){ int vlen = triangle[i].size(); for(int j = 0; j < vlen; ++j){ if(j==0) dp[i][j] = dp[i-1][0] + triangle[i][0]; else if(j == vlen-1) dp[i][j] = dp[i-1][vlen-2] + triangle[i][vlen-1]; else{ dp[i][j] = dp[i-1][j-1] < dp[i-1][j] ? dp[i-1][j-1] : dp[i-1][j]; dp[i][j] += triangle[i][j]; } } } int min = dp[row-1][0]; for(int j = 1; j < col; j++) if(min > dp[row-1][j]) min = dp[row-1][j]; for(int i = 0; i < row; ++i) delete[] dp[i]; delete[] dp; return min; }
dp:
1-dimension array, O(n) extra space
row is equal to col, right?
int minimumTotal(vector<vector<int> > &triangle) { // Start typing your C/C++ solution below // DO NOT write int main() function int row = triangle.size(); int col = triangle[row-1].size(); int* dp = new int[col]; dp[0] = triangle[0][0]; for(int i = 1; i < row; ++i){ int tmp; int vlen = triangle[i].size(); for(int j = 0; j < vlen; ++j){ if(j==0) { tmp = dp[0]; dp[j] = dp[0] + triangle[i][0];} else if(j == vlen-1) dp[j] = tmp + triangle[i][vlen-1]; else{ int res = tmp < dp[j] ? tmp : dp[j]; res += triangle[i][j]; tmp = dp[j]; dp[j] = res; } } } int min = dp[0]; for(int j = 1; j < col; j++) if(min > dp[j]) min = dp[j]; delete[] dp; return min; }
- leetcode_question_120 Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- Triangle
- 用setvbuf 实现setbuf
- mysql报错1045时的解决办法
- mysql清理日志文件
- cf165c Another Problem on Strings
- 在C++程序中调用被C 编译器编译后的函数,为什么要加 extern "C"
- leetcode_question_120 Triangle
- cygwin下dll和lib的生成方法
- mybatis实现新添加一条数据,并获取新添加数据的ID
- Apple Mac 安装系统遇到,mac os 和window都无法安装成功的问题解决
- effective c++读书笔记(二)
- 发一个LCD的测试程序
- C#中通过IP获取MAC地址,获取本机IP和MAC地址
- mybatis多对多关联,向关联表插入数据方法
- 慢慢开始培养你的创造性思维