• 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; } };


  • 相关阅读:
    如何判定某个类的职责是否够"单一"?
    Guava中的Cache简易源码分析
    为什么尽量少用继承?
    聊聊抽象类和接口
    WINDOW 搭建 ELK 2.4.0
    摇摇棒,理工男的择偶权(上)
    C++值多态:传统多态与类型擦除之间
    C++值元编程
    STM32学习笔记——printf
    C++98/11/17表达式类别
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5089064.html
Copyright © 2020-2023  润新知