LeetCode题练习与总结:三角形最小路径和--120

一、题目描述

给定一个三角形 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
  • -10^4 <= triangle[i][j] <= 10^4

二、解题思路

这个问题可以通过动态规划来解决。我们可以从三角形的底部开始,逐层向上计算每个节点到底部的最小路径和。对于每个节点,其最小路径和等于其值加上其下一层相邻节点的最小路径和。这样,当我们计算到三角形的顶部时,顶部的值就是整个三角形的最小路径和。

具体步骤如下:

  1. 初始化一个与三角形相同大小的二维数组dp,用于存储每个节点到底部的最小路径和。
  2. 从三角形的最后一行开始,将这一行的值复制到dp的对应行。
  3. 从倒数第二行开始,逐行向上计算,对于每一行的每个节点,其最小路径和为该节点的值加上其下一行相邻节点的最小路径和中的较小值。
  4. 当计算到三角形的顶部时,dp[0][0]就是整个三角形的最小路径和。
  5. 返回dp[0][0]作为结果。

三、具体代码

class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n = triangle.size();int[][] dp = new int[n][n];// 初始化dp数组的最后一行for (int i = 0; i < n; i++) {dp[n - 1][i] = triangle.get(n - 1).get(i);}// 从倒数第二行开始向上计算for (int i = n - 2; i >= 0; i--) {for (int j = 0; j <= i; j++) {dp[i][j] = triangle.get(i).get(j) + Math.min(dp[i + 1][j], dp[i + 1][j + 1]);}}// 返回顶部节点的最小路径和return dp[0][0];}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 初始化dp数组的最后一行需要遍历n个元素,时间复杂度为O(n)。
  • 双层循环中,外层循环执行了n-1次,内层循环在最坏情况下(即倒数第二行)执行了n-1次。
  • 因此,内层循环的总执行次数是1 + 2 + 3 + … + (n-1),这是一个等差数列求和,其和为((1 + n-1) * (n-1)) / 2。
  • 综合外层循环和内层循环,总的时间复杂度是O(n^2)。
2. 空间复杂度
  • dp数组的大小为n x n,用于存储每一行的最小路径和。
  • 因此,空间复杂度主要取决于dp数组的大小,即O(n^2)。

综上所述,代码的时间复杂度是O(n^2),空间复杂度是O(n^2)。

五、总结知识点

  1. 动态规划:这是一种通过将问题分解为更小的子问题来解决复杂问题的方法,通常用于优化问题,如最短路径、最大子数组和等。

  2. 二维数组dp是一个二维数组,用于存储每一行的最小路径和。在Java中,它被初始化为int[n][n],其中n是三角形的行数。

  3. 列表(List)的使用List<List<Integer>> triangle 是一个包含整数列表的列表,用于存储杨辉三角的数据。在这里,它被用来存储输入的三角形。

  4. 循环结构for 循环用于重复执行一系列操作。这里有双层循环,外层循环用于控制行数,内层循环用于计算每一行的最小路径和。

  5. 数学函数Math.min() 函数用于返回两个整数中的较小值。

  6. 数组的索引操作:在更新每一行元素时,代码通过索引来访问和修改二维数组中的元素。

  7. 列表的元素访问triangle.get(i).get(j) 用于获取列表中索引为 i 的子列表中索引为 j 的元素值。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

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

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

相关文章

一次改SQLMAP的操作

前言 sqlmap这个工具&#xff0c;相信各位大佬们都不陌生&#xff0c;但sqlmap虽好&#xff0c;也时常会有些实际存在但无法注入的地方&#xff0c;这时候就需要我们改它的配置了&#xff0c;今天就以本人遇到的事件进行阐述。 正文 确认注入点 通过一系列测试最终确定这里…

循环语句大揭秘:while、do-while、for、foreach你都掌握了吗?

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

招募来袭 | 与热爱技术的谷歌开发者一起创造精彩

写在前面 技术的进步在不断推动着世界发展。从 Android、Flutter 等产品的稳步更新迭代&#xff0c;到秉承着负责任的态度对 AI 进行探索&#xff0c;我们通过每一次的技术跃进&#xff0c;帮助大家打开新的视野&#xff0c;激发更多的灵感&#xff0c;将我们的工具和平台打造成…

css3 都有哪些新属性

1. css3 都有哪些新属性 1.1. 圆角边框 (border-radius)1.2. 盒子阴影 (box-shadow)1.3. 文本阴影 (text-shadow)1.4. 响应式设计相关属性1.5. 渐变背景 (gradient backgrounds)1.6. 透明度 (opacity 和 rgba/hsla)1.7. 多列布局 (column-count, column-gap, etc.)1.8. 变换 (t…

Android --- MVVM+DataBinding+Fragment+Retrofit+Adapter 简单示例

首先&#xff0c;我们将使用 Retrofit 进行网络请求&#xff0c;所以我们需要添加 Retrofit 的依赖。在你的 build.gradle 文件中添加以下依赖&#xff1a; implementation com.squareup.retrofit2:retrofit:2.9.0 implementation com.squareup.retrofit2:converter-gson:2.9.…

动态规划学习

1、背包DP 01 01 01背包&#xff1a;枚举物品然后枚举体积&#xff0c;体积从大到小枚举更新 f [ j ] m a x ( f [ j ] , f [ j − w ] v ) f[j]max(f[j],f[j-w]v) f[j]max(f[j],f[j−w]v).完全背包&#xff1a;枚举物品然后枚举体积&#xff0c;体积从小到大枚举更新 f [ j …

java(kotlin)和 python 通过DoubleCloud的kafka进行线程间通信

进入 DoubleCloud https://www.double.cloud 创建一个kafka 1 选择语言 2 运行curl 的url命令启动一个topic 3 生成对应语言的token 4 复制3中的配置文件到本地&#xff0c;命名为client.properties 5 复制客户端代码 对python和java客户端代码进行了重写&#xff0c;java改成…

websocket php workerman 服务器nginx配置wss协议

首先 Nginx的版本要高&#xff0c;尽量用当前最新稳定版本。 其次 WSS协议&#xff0c;是在HTTPS协议的基础上&#xff0c;进行协议升级&#xff0c;进行通讯的&#xff0c;所以先要保证你有一个 HTTPS正常的WEB站点。 所以&#xff0c;通过Nginx -V 请保证 一定有 --with-ht…

【TensorFlow深度学习】使用TensorFlow构建马尔可夫决策过程模型

使用TensorFlow构建马尔可夫决策过程模型 使用TensorFlow构建马尔可夫决策过程模型&#xff1a;决策分析的深度实践一、马尔可夫决策过程简介二、TensorFlow准备三、定义MDP模型参数四、构建状态值函数模型五、迭代更新值函数六、策略提取与决策结语 使用TensorFlow构建马尔可夫…

【ArcGIS微课1000例】0119:TIFF与grid格式互相转换

文章目录 一、任务描述二、tiff转grid三、grid转tif四、注意事项一、任务描述 地理栅格数据常用TIFF格式和GRID格式进行存储。TIFF格式的栅格数据常以单文件形式存储,不仅存储有R、G、B三波段的像素值,还保存有地理坐标信息。GRID格式的栅格数据常以多文件的形式进行存储,且…

国产操作系统上给麒麟虚拟机安装virtualbox增强工具 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上给麒麟虚拟机安装virtualbox增强工具 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;昨天给大家带来了一篇在国产操作系统上给VirtualBox中的Win7虚拟机安装增强工具的文章&#xff0c;今天我们将继续深入&#xff0c;介绍…

ORA-12541:TNS:没有监听器

"ORA-12541: TNS: 没有监听器" 是 Oracle 数据库连接时可能遇到的错误。这个错误通常表示客户端尝试连接到的数据库监听器未在目标主机上运行或未配置正确。解决这个问题的方法通常涉及以下步骤&#xff1a; 1.确保监听器在运行 确保数据库服务器上的 Oracle 监听器…

如何在 C# 中轻松从 HTML 中提取纯文本

一.介绍 处理 HTML 内容通常需要提取纯文本以进行处理、分析或显示&#xff0c;而不会产生 HTML 标记的杂乱。在本博客中&#xff0c;我们将探索一种简单而有效的方法&#xff0c;即使用 C# 中的正则表达式 (Regex) 来剥离 HTML 标记并将 HTML 实体解码为纯文本。此技术在读取…

ForceMode应用力的不同模式

1. ForceMode.Force 解释: 这种模式下&#xff0c;力被持续应用&#xff0c;类似于施加一个恒定的加速度。应用场景: 适用于需要不断施加力的情况&#xff0c;如推动物体。公式: F m * a&#xff08;质量*加速度&#xff09;效果: 施加的力会被乘以 Time.deltaTime&#xff0…

Plotly : 超好用的Python可视化工具

文章目录 安装&#xff1a;开始你的 Plotly 之旅基本折线图&#xff1a;简单却强大的起点带颜色的散点图&#xff1a;数据的多彩世界三维曲面图&#xff1a;探索数据的深度气泡图&#xff1a;让世界看到你的数据小提琴图&#xff1a;数据分布的优雅展现旭日图&#xff1a;分层数…

虚拟机与windows文件同步

如果上图中不能设置&#xff0c;则在虚拟机mnt文件夹执行以下命令&#xff1a;

项目质量保证措施(Word原件)

一、 质量保障措施 二、 项目质量管理保障措施 &#xff08;一&#xff09; 资深的质量经理与质保组 &#xff08;二&#xff09; 全程参与的质量经理 &#xff08;三&#xff09; 合理的质量控制流程 1&#xff0e; 质量管理规范&#xff1a; 2&#xff0e; 加强协调管理&…

超详解——Python模块文档——小白篇

目录 1. Unix起始行 示例&#xff1a; 2. 对象和类型 示例&#xff1a; 3. 一切都是对象 示例&#xff1a; 4. 理解对象和引用 示例&#xff1a; 5. 理解对象和类型 示例&#xff1a; 6. 标准类型 示例&#xff1a; 7. 其他内建类型 示例&#xff1a; 8. 类型的类…

【乐吾乐2D可视化组态编辑器】在线使用,快速入门

一、在线使用 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.com/ 二、步骤 本教程将带领你快速体验2D可视化编辑器的全流程开发。 1.创建图纸 进入2d编辑器主界面后&#xff0c;主界面最中心为图纸面板&#xff0c;默认为空图纸&#xff0c;在界面左侧为组…

数仓SQL如何做code review?

第一步应该是先明确需求&#xff0c;明确完需求以后在进行开发&#xff0c;接着code review 在明确HiveSQL、SparkSQL的编写需求后&#xff0c;接下来将详细介绍代码审查&#xff08;Code Review&#xff09;时的一些关键注意点&#xff1a; 1. 关联关系 left join 和 join …