120. 三角形最小路径和

给定一个三角形 triangle ,找出自顶向下的最小路径和。

每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。

示例 :

输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]
输出:11
解释:如下面简图所示:23 46 5 7
4 1 8 3
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

本题采用动态规划的方法。

假设到i行第j个数字的最小路径为f[i][j],则有:
f[i][j]=min(f[i−1][j],f[i−1][j−1])+triangle[i][j]f[i][j]=min(f[i-1][j],f[i-1][j-1])+triangle [i][j] f[i][j]=min(f[i−1][j],f[i−1][j−1])+triangle[i][j]
第0列只能从0列得到,固有:
f[i][0]=f[i−1][0]+triangle[i][0]f[i][0]=f[i-1][0]+triangle [i][0] f[i][0]=f[i−1][0]+triangle[i][0]
第i列只能从i-1列得到,固有:
f[i][i]=f[i−1][i−1]+triangle[i][i]f[i][i]=f[i-1][i-1]+triangle [i][i] f[i][i]=f[i−1][i−1]+triangle[i][i]
得出从上到下每行每个数字的最小路径,就能得到到达最后一行每个数字的最小路径,然后再选取最小值,就可以的到整体的最小路径。

class Solution {public:int minimumTotal(vector<vector<int>>& triangle) {int n=triangle.size();vector<vector<int>> f(n,vector<int>(n));f[0][0]=triangle[0][0];for(int i=1;i<n;++i){f[i][0]=f[i-1][0]+triangle[i][0];for(int j=1;j<i;j++){f[i][j]=min(f[i-1][j-1],f[i-1][j])+triangle[i][j];}f[i][i]=f[i-1][i-1]+triangle[i][i];}return *min_element(f[n - 1].begin(), f[n - 1].end());}
};

空间优化

因为i行只与i-1行有关,故只需要2n存储空间即可,即O(n);

class Solution {public:int minimumTotal(vector<vector<int>>& triangle) {int n=triangle.size();//vector<vector<int>> f(n,vector<int>(n));vector<int> f(n,0);vector<int> m(n,0);f[0]=triangle[0][0];for(int i=1;i<n;++i){m[0]=f[0]+triangle[i][0];for(int j=1;j<i;j++){m[j]=min(f[j-1],f[j])+triangle[i][j];}m[i]=f[i-1]+triangle[i][i];f=m;//f.assign(m.begin(),m.end());}return *min_element(f.begin(), f.end());}
};

leetcode--笔记——120. 三角形最小路径和相关推荐

  1. leetcode - 120. 三角形最小路径和

    120. 三角形最小路径和 ------------------------------------------ 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如 ...

  2. Leetcode 120. 三角形最小路径和 (每日一题 20210927)

    给定一个三角形 triangle ,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点 ...

  3. LeetCode 120. 三角形最小路径和(动态规划)

    题目描述 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径 ...

  4. Leetcode 120. 三角形最小路径和 解题思路及C++实现

    解题思路: 这是一个典型的动态规划问题,定义一个数组  dp,dp[i] (tmp[i]也是)表示到达当前行第 i 个元素的最小路径和. 所以只需要定义一个1维数组dp(n, 0),每循环遍历第 i ...

  5. 120. 三角形最小路径和

    给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点. 例如,给定三角 ...

  6. 【Java语言】力扣系列----120. 三角形最小路径和

    给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点. 例如,给定三角 ...

  7. LeetCode 120. 三角形最小路径和

    思路: 从下(倒数第二行)往上开始计算,找到最先和之后,每一行的值重新赋值,直到最顶层就是最小值了. public int minimumTotal(List<List<Integer&g ...

  8. leetcode算法题--三角形最小路径和

    原题链接:https://leetcode-cn.com/problems/triangle/ 动态规划 dp[i][j]表示根结点到结点(i,j)的路径上的最小和 状态转移 dp[i][j]=min ...

  9. 【LeetCode笔记】64. 最小路径和(Java、动态规划)

    文章目录 题目描述 代码 & 题目描述 题目描述 动态规划,dp[][]都可以直接用grid[][].空间复杂度O(1) 代码 & 题目描述 dp[i[j] = grid[i][j] ...

最新文章

  1. Vue 项目上线优化
  2. Oh my God, Swagger API文档竟然可以这样写?
  3. 如何在Windows上使用Git创建一个可执行脚本?
  4. 图像处理之卷积---任意卷积核的快速实现
  5. 服务器物理链路,【交换机在江湖对接案例】配置堆叠系统对接NLB服务器群集示例(通过物理链路环回方法)...
  6. C++/C学习笔记(十一)——存储分配器和适配器
  7. 不再惧怕!二叉树结构相关算法总结 | 原力计划
  8. mysql-front5.1的注册码
  9. 流程图软件用哪款: Draw.io, 亿图图示, ProcessOn. 做最适合你的流程图
  10. 星空主题设计理念_「案例赏析」深邃星空理念:鲜为人知的独特标识设计
  11. 马克飞象自定义代码段风格
  12. 4.1EF Core
  13. 小学信息技术计算机教学反思,小学信息技术教学反思
  14. 基于MTCNN卷积神经网络的人脸识别
  15. 软件工程导论--设计工程
  16. 该知道的都知道 不知道的慢慢了解 正则表达式符号大全
  17. JavaScript(JS)的DOM对象(JS的Document对象)----什么是DOM对象?
  18. 体验搜狐PaaS平台搜狐云景-自动调度(Autoscale)
  19. 微软准备再次裁员2850人 一年之内完成
  20. 笔记本电脑dns服务器没有响应怎么办,华硕笔记本重装系统后dns服务器未响应怎么办?...

热门文章

  1. 拉开你和同龄人差距的,不是基因,不是努力,而是……
  2. MPB:中科院深圳先进院戴磊组小鼠粪便样本中16S拷贝数的定量检测
  3. R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战
  4. R语言广义线性模型函数GLM、R中有几种logistic回归扩展和变异、robust包中的glmRob函数鲁棒logistic回归、ms包中的lrm函数拟合序数逻辑回归
  5. R语言广义加性模型GAMs:可视化每个变量的样条函数、样条函数与变量与目标变量之间的平滑曲线比较、并进行多变量的归一化比较、测试广义线性加性模型GAMs在测试集上的表现(防止过拟合)
  6. R语言使用caret包构建GBM模型:在模型最优参数已知的情况下,拟合整个训练集,而无需进行任何重采样或参数调优
  7. R语言dplyr包连接多个dataframe实战:使用left_join
  8. R语言dplyr包对数据进行超前或者之后处理(lead、lag)实战
  9. R语言aggregate函数数据聚合实战
  10. 分类(classification)是认知的基础、分类步骤及主要算法、分类与回归的区别、分类过程