网站首页 > 技术文章 正文
导读:前面分享的几道题目,难度都比较大,今天降低下难度,分享一道比较简单的动态规划题。
题目描述:
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[ [2], [3, 4], [6, 5, 7], [4, 1, 8, 3] ]
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
说明:
如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。
题目分析:
这个题目,很容易想出一个错误的贪心算法,从顶向下每次选最小的,这么做肯定是错的(虽然这么做能通过题目的样例)!怎么做呢?要求自顶向下的最小路径和,我结合图片来说吧。
先看图片里上面两个方框的转化,假设我们现在从顶部下来后,到达第三层[6 5 7]红色字体的位置,比如在数字6这里,那么我们往第四层走的时候,肯定是选择1,这样才能保证在6这个位置下来后和最小,同理,第三层红色数字5和7,分别选择1和3走到底部!这样原先4层的三角形变成了3层的三角形,问题规模变小了,哈哈!
同理我们也可以把三层的继续变成两层的!见上图下层的方框转化!聪明的读者应该猜到怎么解决这个问题了,没错,从下到上,一层层倒推上去!
根据题意,三角形数字存储在二维数组triangle[][]里面,那么
triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1]) , 0<= i < 三角形层数 - 1
最终的答案就存储在triangle[0][0]里面!给出源码:
复杂度分析:
因为每个三角形的元素遍历了一遍,所以复杂度是和三角形元素相关的,假设三角形n个元素,那复杂度就是O(n)的,空间复杂,因为并没有引入额外空间,所以是O(1)的!leetcode上击败100%的提交。
总结:
虽然题目比较简单,但是麻雀虽小五脏俱全!希望大家有所收获!
猜你喜欢
- 2024-10-22 梅花易数,原来是这么来的 梅花易数的本质
- 2024-10-22 根据云计算下医疗保健,其优先级变化,会对调度技术造成什么影响
- 2024-10-22 麻将玩法新手教学,“雀神”成长之路,麻将有趣的未知性
- 2024-10-22 基于深度残差收缩网络和优化BiLSTM的轴承剩余寿命预测方法
- 2024-10-22 人工智能入门算法逻辑回归学习笔记
- 2024-10-22 判断偶数的方式这么多,总有一种能让你感到意外
- 2024-10-22 送你个使用锦囊,防止蓝牙耳机被“策反”
- 2024-10-22 封面文章 | 基于自适应多分辨率分析的电动拖拉机驱动功率分配策略
- 2024-10-22 狮群优化核极限学习机的分类算法 狮群调整战术
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)