• leetcode-triangle


    虽说题目很简单,也没有优化。但是depend on myself & 一遍就AC还是很让人开心的。。

    之前二维vector不熟,通过这个题熟了很多。

    时间复杂度O(n^2),空间复杂度O(n^2). 优化之后可以做到空间复杂度O(1), 见代码2.

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 class Solution {
     7 public:
     8     int minimumTotal(vector<vector<int> > &triangle) {
     9         if (triangle.empty())
    10             return 0;
    11         vector<vector<int>> d;
    12         for (int i = 0; i < triangle.size(); i++)
    13         {
    14             d.push_back(vector<int>(triangle[i].size(), INT_MAX));
    15         }
    16         d.at(0).at(0) = (triangle.at(0).at(0));
    17         for (int i = 1; i < triangle.size(); i++)
    18         {
    19             for (int j = 0; j < triangle[i].size(); j++)
    20             {
    21                 if (j == 0)
    22                 {
    23                     d.at(i).at(j) = triangle.at(i).at(j) + d.at(i - 1).at(j);
    24                 }
    25                 else if (j == int(triangle.at(i).size()) - 1)
    26                 {
    27                     d.at(i).at(j) = triangle.at(i).at(j) + d.at(i - 1).at(j - 1);
    28                 }
    29                 else
    30                 {
    31                     d.at(i).at(j) = triangle.at(i).at(j) + min(d.at(i - 1).at(j - 1), d.at(i - 1).at(j));
    32                 }
    33             }
    34         }
    35         int minv = d.at(int(d.size()) - 1).at(0);
    36         for (int i = 1; i < int(d.at(int(d.size())-1).size()); i++)
    37         {
    38             if (d.at(d.size()-1).at(i)<minv)
    39             {
    40                 minv = d.at(d.size() - 1).at(i);
    41             }
    42         }
    43         return minv;
    44     }
    45 };
    46 
    47 int main()
    48 {
    49     Solution s;
    50     vector<vector<int>> tri;
    51     int a1[] = { 2 };
    52     int a2[] = { 3, 4 };
    53     int a3[] = { 6, 5, 7 };
    54     int a4[] = { 4, 1, 8, 3 };
    55     //tri.push_back(vector<int>(a1,a1+1));
    56     //tri[0].push_back(1); tri[0].push_back(9);
    57     tri.push_back(vector<int>(a1, a1 + 1));
    58     tri.push_back(vector<int>(a2, a2 + 2));
    59     tri.push_back(vector<int>(a3, a3 + 3));
    60     tri.push_back(vector<int>(a4, a4 + 4));
    61     cout<<s.minimumTotal(tri)<<endl;
    62     return 0;
    63 }

     以下为优化后:空间复杂度变为O(1)。

     1 class Solution {
     2 public:
     3     int minimumTotal(vector<vector<int> > &triangle) {
     4         if (triangle.empty())
     5             return 0;
     6         for (int i = triangle.size() - 2; i >= 0; i--)
     7         {
     8             for (int j = 0; j < i + 1; j++)
     9             {
    10                 triangle[i][j] += min(triangle[i+1][j],triangle[i+1][j+1]);
    11             }
    12         }
    13         return triangle[0][0];
    14     }
    15 };
  • 相关阅读:
    别了,DjVu!
    DjVu转PDF
    我的电子书历程
    连续翻页浏览器面临的共同问题
    对超过2TB的硬盘进行分区需要使用parted
    DB2常用命令
    CentOS增加网卡
    mysql相关参数解读
    max_user_connections参数设置试验
    mysql最大连接数试验
  • 原文地址:https://www.cnblogs.com/forcheryl/p/4001299.html
Copyright © 2020-2023  润新知