zoukankan      html  css  js  c++  java
  • [Leetcode 65] 120 Triangle

    Problem:

    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.

    Analysis:

    Basically, this is a simple dynamic programming problem. Start from the first level, at level i, computing the possible min length of each position at level i give the i-1 level. And after computing the last level, use find_min funnction to get the minimum value of the path. Besides, this solution is an online version. It can always give the current solution.

    This time complexity is O(n) and the space complecity is O(n).

    Code:

     1 class Solution {
     2 public:
     3     int minimumTotal(vector<vector<int> > &triangle) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         for (int i=1; i<triangle.size(); i++) {
     7         
     8             for (int j=0; j<i+1; j++) {
     9                 if (j == 0) //first in a row
    10                     triangle[i][0] += triangle[i-1][0]; 
    11                 else if (j == i) //last in a row
    12                     triangle[i][i] += triangle[i-1][i-1];
    13                 else // two choice & get smaller
    14                     triangle[i][j] += min(triangle[i-1][j-1], triangle[i-1][j]);
    15             }
    16         }
    17         
    18         return find_min(triangle[triangle.size()-1]);
    19     }
    20     
    21     int min(int a, int b) {
    22         return (a<b)? a : b;
    23     }
    24     
    25     int find_min(vector<int> v) {
    26         int min = v[0];
    27         
    28         for (int i=1; i<v.size(); i++) {
    29             if (v[i] < min)
    30                 min = v[i];
    31         }
    32         
    33         return min;
    34     }
    View Code
  • 相关阅读:
    合并项目(Project)
    Table.Group分组…Group(Power Query 之 M 语言)
    日程表(Project)
    判断存在…Contains…(Power Query 之 M 语言)
    批量打印本文件夹内除本工作簿以外所有工作簿的第一个工作表
    断舍离与“优秀”推销员
    JS中的let变量
    JavaScript中typeof正确使用
    JavaScript基础学习(一)
    Write an ASP.NET MVC Web app to get Outlook mail, calendar, and contacts
  • 原文地址:https://www.cnblogs.com/freeneng/p/3192516.html
Copyright © 2011-2022 走看看