算法训练:Triangle
来源:互联网 发布:html的sql注入 编辑:程序博客网 时间:2024/06/05 16:38
题目链接:https://leetcode.com/problems/triangle/#/description
题目描述:
给定一个三角形,求从三角形顶部到底部的路径长度的最小值。
例如:给定如下矩阵
[ [2], [3,4], [6,5,7], [4,1,8,3]]
每一步只能到达下一行的邻接点,例如第二行中的3只能到达6或5阵,所以路径的最小值为:2 + 3 + 5 + 1 = 11
解题思路:
从第二行遍历三角形的每一行(因为第一行只有一个数,是必选无疑的),然后求出在该点时的路径长度是多少。
由于每一步只能到达下一行的邻接点,所以对于每一行的第一个数来说,只可能是其正上方的点到达它,最后一个数只能是其左上方的邻接点到达
它,即:
每一行的第一个数:triangle[i][j] += triangle[i-1][j]
每一行的最后一个数:triangle[i][j] += triangle[i-1][j-1]
对于其他中间点,达到该点,则有两种方式,要么是其正上方的点,要么是其右上方的邻接点:
triangle[i][j] += min(triangle[i-1][j-1], triangle[i-1][j])
以这种方式遍历完数组后,triangle[i][j]保存的是到达第i行第j列的这个点的路径的最小值。
所以要求顶部到底部的路径最小值,只需求得最后一行中的最小值即可。
int minimumTotal(vector<vector<int>>& triangle) { int row = triangle.size(); if(row == 0) return -1; for (int i = 1; i < row; ++i) { for (int j = 0; j < triangle[i].size(); ++j) { //边界值 if (j == 0) triangle[i][j] += triangle[i-1][j];//第i个数组的第一个数 else if (j == triangle[i].size()-1) triangle[i][j] += triangle[i-1][j-1];//第i个数组的最后一个数 //非边界值 else { triangle[i][j] += min(triangle[i-1][j-1], triangle[i-1][j]); } } } //最后一行中的最小值即为所求 int result = triangle[row-1][0]; for (int i = 0; i < triangle[row-1].size(); ++i) { result = min(result, triangle[row-1][i]); } return result; }
运行结果:
Your Input
[[1],[4,5],[2,7,1],[5,3,2,6]]
Your answer
9
Expected answer
9
阅读全文
0 0
- 算法训练:Triangle
- Triangle Count算法
- Triangle Count 算法
- 算法训练
- 算法训练
- 算法 Pascal's Triangle II
- (算法分析Week8)Triangle[Medium]
- 假期训练——POJ - 1163 The Triangle dp
- ACM算法训练参照
- BPN多种训练算法
- BPN多种训练算法
- ACM算法训练参照
- 整数算法的训练
- 在线自适应训练算法
- ACM算法训练
- ACM算法训练
- 算法训练 操作格子
- 算法训练 结点选择
- 1357 [Ba1000] Simple C++ Program
- SAP HANA Odata的POST报错404 resource not found
- Linux源码安装LNMP
- uva 227 Puzzle
- (154)光照通道
- 算法训练:Triangle
- 硬件访问服务3之Android程序操作LED_P
- Flask +jinja2+bootstrap+sqlite3+sqlalchemy构建web基础学习总结
- SAP HANA Odata的POST报错400 Bad Request Error
- 升级Android studio之后报错之解决办法
- java Class类文件结构
- 找新朋友(欧拉函数)
- powerdesigner
- JS插件swiper的使用