• leetcode[120] Triangle


    给定一个三角数组,找从上到下的最小和,例如:

    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).

    思路一,DP, 在原三角数组中操作,每层更新为到该层的最小距离,然后返回最后一层的最小即可。

    class Solution {
    public:
    int minimumTotal(vector<vector<int> > &triangle)
    {
        int row = triangle.size(), ans = INT_MAX;
        if (row == 0) return 0;
        for (int i = 1; i < row; ++i)
        {
            triangle[i][0] = triangle[i-1][0] + triangle[i][0];
            for (int j = 1; j < triangle[i].size() - 1; ++j)
            {
                triangle[i][j] = min(triangle[i-1][j-1], triangle[i-1][j]) + triangle[i][j];
            }
            triangle[i][triangle[i].size()-1] = triangle[i-1][triangle[i-1].size()-1] + triangle[i][triangle[i].size()-1];
        }
        for (int i = 0; i < triangle[row-1].size(); ++i)
        {
            if (triangle[row-1][i] < ans)
                ans = triangle[row-1][i];
        }
        return ans;
    }
    };

    思路二,不改变原来数组,类似上一题,另建空间O(row)来存到当前行的最优,然后根据数组来更新这个最优数组,然后在数组中返回最小的值。

    class Solution {
    public:
    int minimumTotal(vector<vector<int> > &triangle)
    {
        int ans = INT_MAX, row = triangle.size(), pre;
        if (row == 0) return ans;
        vector<int> tmp;
        tmp.push_back(triangle[0][0]);
        for (int i = 1; i < row; ++i)
        {
            pre = tmp[0];
            tmp[0] += triangle[i][0];
            for (int j = 1; j < tmp.size(); ++j)
            {
                int mid = tmp[j];
                tmp[j] = min(pre, tmp[j]) + triangle[i][j];
                pre = mid;
            }
            tmp.push_back(pre + triangle[i][triangle[i].size()-1]);
        }
        for (int i = 0; i < tmp.size(); ++i)
        {
            if (tmp[i] < ans)
                ans = tmp[i];
        }
        return ans;
    }
    };

    耗时一样。空间不一样。

  • 相关阅读:
    ps cc 2018安装
    eclipse 快速添加 set , get 方法
    电脑设置以太网
    C# 获取web.config配置文件内容
    C# @Page指令中的AutoEventWireup,CodeBehind,Inherits
    未能正确加载“Microsoft.VisualStudio.Implementation.EditorPackage”包
    C# 实现MD5加密
    mutex 简单介绍
    select @@IDENTITY
    C# vs2012创建报表
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4137120.html
Copyright © 2020-2023  润新知