• Leetcode Triangle


    /*
    意思就是:
    
    给定一个三角形。求得和最小的路径。每层仅仅能选一个整数,上一层和下一层的整数必须是相邻的。
    
    思路:
    
    1,动态规划。到第i层的第k个顶点的最小路径长度表示为f(i,k)。则f(i, k) = min{f(i-1,k),  f(i-1,k-1)} + d(i, k); 当中d(i, k)表示原来三角形数组里  的第i行第k列的元素。则能够求得从第一行到终于到第length-1行第k个元素的最小路径长度。最后再比較第length-1行中全部元素的路径长度大小。求得最小值。

    2,本题主要关心的是空间复杂度不要超过n。 3,注意边界条件——每一行中的第一和最后一个元素在上一行中仅仅有一个邻居。

    而其它中间的元素在上一行中都有两个相邻元素。 演示样例: 初始 triangle [ [2], [3,4], [6,5,7], [4,1,8,3] ] 程序执行之后的triangle [ [2], [5,6], [11,10,13], [15,11,18,16] ] */ class Solution { public: int minimumTotal(vector<vector<int> > &triangle) { int size = triangle.size(); if(size == 0){ return 0; } int i = 0; int j = 0; int innerSize = 0; int minPath = 0x7FFFFFFF; for(i = 1; i < size; i++){ innerSize = triangle[i].size(); for(j = 0; j < innerSize; j++){ if(j == 0){ triangle[i][0] += triangle[i-1][0]; } else if(j == innerSize - 1){ triangle[i][innerSize - 1] += triangle[i -1][innerSize - 2]; } else { triangle[i][j] += min(triangle[i - 1][j-1], triangle[i - 1][j]); } } } innerSize = triangle[size - 1].size(); for(j = 0; j < innerSize; j++){ if(triangle[size -1][j] < minPath){ minPath = triangle[size -1][j]; } } return minPath; } };


  • 相关阅读:
    asp.net与javascript问题
    动态加载用户控件
    ASP.NET中实现模版的动态加载
    一个简单的购物车
    给图片加上水印效果
    用存储过程自定义分页
    上传图片及显示图片
    sql server图片的保存和读取
    Legato Single Server SertupFor RMAN
    确定裸设备上控制文件的大小
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5089064.html
Copyright © 2020-2023  润新知