稀碎从零算法笔记Day48-LeetCode:三角形最小路径和

题型:DP、二维DP、矩阵

链接:120. 三角形最小路径和 - 力扣(LeetCode)

来源:LeetCode

题目描述

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

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

题目样例

示例 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)。

示例 2:

输入:triangle = [[-10]]
输出:-10

提示:

  • 1 <= triangle.length <= 200
  • triangle[0].length == 1
  • triangle[i].length == triangle[i - 1].length + 1
  • -104 <= triangle[i][j] <= 104

进阶:

  • 你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题吗?

题目思路

二维DP 顾名思义就是DP数组用DP[I][J]的形式来表示子问题:

先说一下 DP[I][J] 的意思:从 I 到 J 的路径长度。
初始化DP[][]数组:因为DP数组表示得是三角形的路径,那么两边的点,只能从上一层、同为两边的点才能走到,因此DP[I][0]和DP[i][size()-1]就可以初始化为 之前的距离  + 这个点的数值

其余的点,就可以用min来选取最小值,最终从DP[size()-1]这一行中,找最小的,那就是最小路径的长度。 

C++代码

class Solution {
public:int minimumTotal(vector<vector<int>>& triangle) {// 子问题:到达[i,j]的路径长度: dp[i][j];// dp[i][j] = min(dp[i-1][j],dp[i-1][j-1]);// 最左边和最右边单独讨论int n = triangle.size();vector<vector<int>> dp(n,vector<int>(n));//虽然是二维数组,但是只遍历下三角dp[0][0] = triangle[0][0];for(int i=1;i<n;++i){dp[i][0] = dp[i-1][0] + triangle[i][0];for(int j = 1;j < i;++j)dp[i][j] = min(dp[i-1][j-1],dp[i-1][j]) + triangle[i][j];dp[i][i] = dp[i-1][i-1] + triangle[i][i];}// 返回的是迭代器return dp[n-1][min_element(dp[n-1].begin(),dp[n-1].end()) - dp[n-1].begin()];//迭代器 - begin 得到的是距离//return *min_element(dp[n-1].begin(),dp[n-1].end());}
};

结算页面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618422.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

L3 【哈工大_操作系统】操作系统启动

本节要点&#xff1a; 1、理解 OS 启动过程发生了什么&#xff0c;理解 OS 与 硬件 与 应用 之间的关系 2、本节讲解了 setup 模块 和 system 模块实现的功能 1、计算机上电时&#xff0c;操作系统在硬盘&#xff08;磁盘&#xff09;上&#xff0c;为了“取指执行”&#xff0…

44.HarmonyOS鸿蒙系统 App(ArkUI)栅格布局介绍

栅格布局是一种通用的辅助定位工具&#xff0c;对移动设备的界面设计有较好的借鉴作用。主要优势包括&#xff1a; 提供可循的规律&#xff1a;栅格布局可以为布局提供规律性的结构&#xff0c;解决多尺寸多设备的动态布局问题。通过将页面划分为等宽的列数和行数&#xff0c;…

扣子Coze插件教程:如何使用Coze IDE创建插件

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃斜杠君&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &#…

探索Sora:OpenAI的革新性视频生成技术

探索Sora&#xff1a;OpenAI的革新性视频生成技术 在数字时代的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;逐渐渗透到我们生活的方方面面&#xff0c;不断推动着科技与创意的边界。近日&#xff0c;OpenAI发布了一款名为Sora的新工具&#xff0c;它利用数据驱动的物…

系统架构最佳实践 -- CRM会员客户关系管理系统架构的设计

在现代商业中&#xff0c;企业与客户之间的关系至关重要。为了更好地管理和维护客户关系&#xff0c;许多企业采用CRM&#xff08;Customer Relationship Management&#xff09;系统。本篇博客将介绍CRM会员客户关系管理系统的架构设计及实践&#xff0c;探讨其核心组成和关键…

2024年DTC的回顾与思考

刚结束了2024的数据库技术嘉年华 这是我从2017年开始就参加的技术大会。中途因为疫情的耽误。正常来说我是连续的。知道我的朋友都知道我习惯炫耀一下。 按照惯例&#xff0c;此时此刻群友都在写大会回顾。只是有几个不讲武德的人已经发送了。下面有主观和客观的分析。 主观上…

第四十八周:文献阅读

目录 摘要 Abstract 文献阅读&#xff1a;时间序列预测的傅里叶图卷积网络 现有问题 提出方法 方法论 傅里叶级数 图信号的傅里叶变换 论文方法&#xff1a;F-GCN&#xff08;傅立叶图卷积网络&#xff09; 数据构建 傅立叶嵌入模块 时空ChebyNet层 框架伪代码 研…

数据分析案例(三):基于RFM分析的客户分群

实验2 基于RFM分析的客户分群 Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢…

[ROS 系列学习教程] 建模与仿真 - Gazebo 与 URDF 建模介绍

ROS 系列学习教程(总目录) 本文目录 一、Gazebo 介绍二、URDF 建模介绍2.1 一个简单的实体2.2 rivz显示URDF模型2.3 保存与加载rviz配置2.4 launch文件快速启动2.5 package结构 由于种种原因&#xff0c;有时我们不能直接使用真实的机器人进行调试&#xff0c;这时就需要对机器…

C++ 之 newmat 矩阵运算库使用笔记

文章目录 Part.I IntroductionChap.I newmat 简介 Part.II 安装与编译Chap.I 直接使用源码Chap.II 基于 CMake 使用源码Chap.III 编译成库 Part.III 关于矩阵的构造与运算Chap.I 矩阵的构造与初始化Chap.II 矩阵的运算Chap.III 矩阵维数和类型的更改Chap.IV 矩阵最值统计 Refer…

Day23_学点儿JSON_定义、数据格式、和XML比较、插件

1 JSON定义 定义&#xff1a;是一种轻量级的数据交换格式 JSON是JavaScript Object Notation缩写 特点&#xff1a; 易于程序员阅读和编写。易于计算机解析和生成。其实是javascript的子集&#xff1a;原生javascript支持JSON <script type"text/javascript">…

64B/66B GT Transceiver 配置

一、前言 前一篇文章已经讲述了64B/66B的编码原理&#xff0c;此篇文章来配置一下7系列GT的64B/66B编码。并讲述所对应的例子工程的架构&#xff0c;以及部分代码的含义。 二、IP核配置 1、打开7 Series FPGAs Transceiver Wizards&#xff0c;选择将共享逻辑放置在example …