Triangle

原创 2016年08月29日 09:01:16

方法1:dfs,时间复杂度是指数,排除

方法2:采用有向图求最短路径的方法,每个元素是一个节点,边的权值等于两个节点的值的和,把所有元素用邻接表存起来,设三角形最后一行有c个数,那么分别以这c个数作为路径寻找的终点,做c次dijkstra,得到c个最短路径,再在c个最短路径中找一个最小的,这个最小的值就是答案,这种方法的时间复杂度是O(cn),就是操作起来太麻烦。

方法3:动态规划,dp数组用了额外的O(n)的空间,时间复杂度O(n),扫描一次就得到了所有的c个结果,比上一个方法好太多了,进一步优化,由于递推式为f(i, k) = min{f(i-1,k),  f(i-1,k-1)} + d(i, k),f(i,k)表示到第i层的第k个顶点的最小路径长度,d(i, k)表示原来三角形数组里的第i行第k列的元素,那么可以直接用triangle数组存递推的结果,代码如下:

class Solution {
public:
	int minimumTotal(vector<vector<int> > &triangle) {
		int length = triangle.size();
		if (length == 0) {
			return 0;
		}

		int i, j;
		for (i = 1; i<length; i++) {
			int length_inner = triangle[i].size();
			//每一行中的第一和最后一个元素在上一行中只有一个邻居。而其他中间的元素在上一行中都有两个相邻元素
			for (j = 0; j<length_inner; j++) {
				if (j == 0) {
					triangle[i][j] = triangle[i][j] + triangle[i - 1][j];
				}
				else if (j == length_inner - 1) {
					triangle[i][j] = triangle[i][j] + triangle[i - 1][j - 1];
				}
				else {
					triangle[i][j] = (triangle[i][j] + triangle[i - 1][j - 1] < triangle[i][j] + triangle[i - 1][j] ? triangle[i][j] + triangle[i - 1][j - 1] : triangle[i][j] + triangle[i - 1][j]);
				}
			}
		}
		int min_path = triangle[length - 1][0];
		for (i = 1; i<triangle[length - 1].size(); i++) {
			min_path = (min_path < triangle[length - 1][i] ? min_path : triangle[length - 1][i]);
		}
		return min_path;
	}
};




GL_TRIANGLE_STRIP之纹理贴图代码

  • 2013年04月10日 16:21
  • 58KB
  • 下载

设计一个Triangle类

  • 2012年06月18日 09:34
  • 1.09MB
  • 下载

十三周(三)定义抽象类shape,由它派生出三个派生类Circle,Rectangle,Triangle

* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学...
  • cailwen
  • cailwen
  • 2012年05月15日 14:26
  • 1411

LearnGL_Triangle

  • 2011年09月25日 07:19
  • 103KB
  • 下载

打印杨辉三角形(Pascal's triangle)——利用链式队列

打印杨辉三角形(Pascal’s triangle)——利用链式队列 1. 杨辉三角的概念 杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。 将二项式(a+b)i展开...
  • cainv89
  • cainv89
  • 2016年05月31日 00:29
  • 4389

The Triangle

  • 2017年09月13日 14:46
  • 780B
  • 下载

triangle-响应式bootstrap模板

  • 2016年09月18日 23:39
  • 10.98MB
  • 下载

Triangle --找三角形数组中最小的路径(重重重)

题目: 链接 解答: 方法一:

pascal triangle

  • 2014年11月16日 12:08
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Triangle
举报原因:
原因补充:

(最多只允许输入30个字)