题目描述:

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

例如,给定三角形:

[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

说明:
如果你可以只使用 O(n) 的额外空间
(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/triangle

问题分析:

这种题拿来一看就知道是动态规划算法了了。

首先我觉得贪心算法貌似不行
贪心的思想是,每次选取当前最短/最大的情况,直到最后得到最优方案。

因此,用动态规划来分析。

因为随着我们走,后边路径可能导致之前走过的路线不再是最优路径。

**

那么很快我们便有了一种解决问题的思路:**

思路:开辟同样大小的三角形(二维数组)

每个位置均保存来到当前位置的最短路径。

这样来看,更直观一点。

这个很容易了吧:
vv[ i ][ j ] = triangle[ i ][ j ] +
min(a[ i - 1 ][ j ] , vv[ i - 1 ][ j + 1 ]

因此,我们采用自底向上的分析法:
当前位置, 不是从正上方过来,必然从左上方的右边过来。

这样,能够得到二维实时路径长度的数组。我们再从最后一层中选出最小的即可。

我们的上述做法可以解决问题,但时空复杂的均为O(N^2)

2 那么来看优化

当我们每次从上边向下走时,遇到相等的就成了一个难题。

我们自底向上来走,这样无论如何都会走到triagle[0 ][ 0],不用担心多出口。

在自底向上走时,我们顺便保存一下当前的最短路径。

注意:核心想法来了:
既然我们只需要最优的一个路径,那么也就是说,我们每层保存的路径,用于求得新一层路径后后,就没啥暖用了,
那么 我们就将其覆盖掉,

因此 一维数组就可以保存当前层所有方格的最优路径了,

再准确点描述:当来到新一层计算好一个方格的最优路径后,就可以覆盖掉下面那层同列的最优路径了。

你明白了吗?

看看代码你一定就懂了。

class Solution {public:int minimumTotal(vector<vector<int>>& triangle) {vector<int> dp(triangle.size()+1,0);//初始化为0//为什么需要多一个数组空间,因为每次取两个路径长度比较并提取其中最小的。//自底向上for(int i=triangle.size()-1; i>=0; i--){for(int j=0; j<triangle[i].size(); j++) {//每求完一层,新一层数据一旦出来就可以覆盖掉//原有数据了,(原数据用不上了)dp[j] = min(dp[j],dp[j+1]) +  triangle[i][j];}}return dp[0];}
};

三角形最小/最大路径相关推荐

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

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

  2. 算法:三角形最小路径和

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

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

    原创公众号:bigsai 欢迎加入力扣打卡 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 题目描述 力扣120原题 给定一个三角形 triangle ,找出自顶向下的最小路径和. ...

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

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

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

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

  6. 动态规划之求解三角形最小路径问题

    求解三角形最小路径问题 一.[问题描述]: 给定 高度为n的一个整数三角形,找出从顶部到底部的最小路径和,只能向先移动相邻的结点.首先输入n,接下来的1~n行,第i行输入i个整数,输出分为2行,第一行 ...

  7. Java 练习 1.三角形最小路径和 2.外出采摘的日本人 3.最大矩形

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

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

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

  9. P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖

    二分图最小不相交路径覆盖 #include<bits/stdc++.h> using namespace std; const int MAXN = 5550; const int MAX ...

  10. [Luogu 1730]最小密度路径

    Description 给出一张有N个点M条边的加权有向无环图,接下来有Q个询问,每个询问包括2个节点X和Y,要求算出从X到Y的一条路径,使得密度最小(密度的定义为,路径上边的权值和除以边的数量). ...

最新文章

  1. python3 正则表达式 嵌套表格_在Python中使用正则表达式匹配嵌套结构
  2. 神秘又强大的@SpringBootApplication注解
  3. python结束循环_python中break、continue 、exit() 、pass终止循环的区别
  4. PyCharm3.0默认快捷键
  5. 做项目,如何选单片机?
  6. [BZOJ1509][NOI2003]逃学的小孩
  7. C#在线预览文档(word,excel,pdf,txt,png)
  8. 公募FOF同质化产品情况引人关注
  9. HUT-XXXX The window of the dazzling 模拟
  10. VC++黑客编程收集的源码集合,只有你想不到的
  11. 今日头条导航栏动画选中+recyclerview
  12. html弹窗复制,js复制弹窗美化
  13. 【服务器数据恢复】EMC Isilon存储误删除的数据恢复案例
  14. 严师出高徒VS名师出高徒
  15. 【Fortran】STOP语句
  16. [精简整理]疏通中国历史脉络——“隋、唐(五代十国)”篇
  17. 推荐一款绘图神器visual-paradigm
  18. 上班假装很忙,下班装逼唬妹子的几个神器,人人都能用
  19. uni-app 压缩图片(base64上传)包含图片验证
  20. centos7常用命令详解

热门文章

  1. 搜狗壁纸桌面PC版 v2.4 官方最新版
  2. C# 使用TWAIN协议进行扫描仪操作
  3. 下载Android Wear助手,fitwear下载
  4. 洞房里昨夜花烛彻夜通明,等待拂晓拜公婆讨个好评。
  5. 浙商突围--关于“浙江制造”的营销学观察(下)
  6. 奥巴马在美国国会发表国情咨文
  7. pytest-夹具函数
  8. 腾讯一面:说一说 MySQL 中索引的底层原理
  9. ensp 静态路由与默认路由
  10. Python中xlrd操作excel单元格