力扣120. 三角形最小路径和(Java 动态规划)

Problem: 120. 三角形最小路径和

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

Problem:64. 最小路径和

本题目可以看作是在上述题目的基础上改编而来,具体的思路:

1.记录一个int类型的大小的 n 乘 n n乘n nn的数组(其中 n n n为数组triangle的行数)用于记录每一个当前阶段的最小路径和
2.大体上可以依据题意得出动态转移方程为dp[i][j] = Math.min(dp[i - 1][j - 1], dp[i - 1][j]) + triangle.get(i).get(j);(其中i与j为遍历数组时的下标)即当前位置的最小路径和为其相邻左侧位置和左上方位置中的最小值加上数组triangle当前位置的值;
3.我们需要单独处理dp数组的第一列和dp
主对角线位置的值(由于dp可以看作为一个方阵,主对角线即为下标(i,i)位置的值)
:第一列依次向下累加;主对角线位置沿主对角线向下累加
3.我们仔细思考便可注意到,由于我们需要对主对角线的元素做一个单独的处理,而该处理会使得dp数组中最后一个位置不一定是最小路径和!!!(我们很容易想到,由于本题目是在求取三角形最小路径和因为我们在单独处理主对角线时不是由其相邻的正上方与正左侧共同得出所以在往下的动态转移过程中就不能确保当前位置就是当前整个决策阶段的最小值,但是我们可以得出对于整个阶段的最小值是存在于dp数组的最后一行的)所以我们求出dp数组中最后一行的最小值,即为给定三角形的最小路径和

解题方法

1.得出数组triangle的大小int n = triangle.size();;并定义int数组dp大小为 n 行 n 列 n行n列 nn
2.初始化dp数组第1行第1列位置(索引下标为(0,0))的值dp[0][0] = triangle.get(0).get(0);
3.从dp数组第二行开始执行动态转移方程,同时处理第一列和dp主对角线位置的值
4.求取dp数组最后一行的最小值并返回。

复杂度

时间复杂度:

O ( N × N ) O(N\times N) O(N×N)其中 N N N为数组triangle的大小

空间复杂度:

O ( N × N ) O(N\times N) O(N×N)

Code

class Solution {/*** The minimum path sum of triangles is obtained by dynamic programming* @param triangle Given martix* @return int*/public int minimumTotal(List<List<Integer>> triangle) {int n = triangle.size();//Record the sum of the shortest pathsint[][] dp = new int[n][n];dp[0][0] = triangle.get(0).get(0);for (int i = 1; i < n; ++i) {//Handle the Column 0dp[i][0] = dp[i - 1][0] + triangle.get(i).get(0);for (int j = 1; j < i; ++j) {dp[i][j] = Math.min(dp[i - 1][j - 1], dp[i - 1][j]) + triangle.get(i).get(j);}//Dispose of (i, i)dp[i][i] = dp[i - 1][i - 1] + triangle.get(i).get(i);}int min = Integer.MAX_VALUE;for (int i = 0; i < n; ++i) {if (dp[n - 1][i] < min) {min = dp[n - 1][i];}}return min;}
}

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

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

相关文章

使用 Github、Hugo 搭建个人博客

Hugo 静态网站构建手册&#xff1a;https://jimmysong.io/hugo-handbook/ 关键字&#xff1a;开源 博客 框架 1、GitHub Pages 官网&#xff1a;https://pages.github.com/ 文档&#xff1a;https://docs.github.com/zh Github Pages 简介 Websites for you and your project…

jax.vmap和jax.pmap介绍

jax.vmap 和 jax.pmap 是 JAX 中用于在不同层面进行并行计算的重要工具&#xff0c;它们有助于提高深度学习模型的效率。 import jax import jax.numpy as jnp# 定义一个简单的函数 def example_fn(x):return jnp.sum(x**2)# 输入数据 key jax.random.PRNGKey(42) x_data ja…

HarmonyOS——ArkUI状态管理

一、状态管理 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染&…

python 异常处理 try...except...finally..

python 异常处理&#xff1a; 简单的异常处理主要依靠内置异常处理结构体&#xff0c;代码结构如下&#xff1a; try: … except ValueError as e: # 异常判断&#xff0c;出现ValueError错误时处理机制 … except ZeroDivisionError as e: # 异常判断&#xff0c;出现ZeroDiv…

2024年免费服务器活动整理汇总

随着科技的发展&#xff0c;服务器在各行各业的应用越来越广泛&#xff0c;而免费服务器活动也成为了许多企业和个人关注的焦点。目前有许多免费服务器活动可供选择&#xff0c;本文将为大家整理汇总免费服务器活动&#xff0c;帮助大家更好地了解和参与。 一、腾讯云免费服务器…

【Linux】:Linux中的Git分支管理

本章开始介绍 Git 的杀⼿级功能之⼀&#xff08;注意是之⼀&#xff0c;也就是后⾯还有之⼆&#xff0c;之三……&#xff09;&#xff1a;分⽀。分⽀就是科幻电影⾥⾯的平⾏宇宙&#xff0c;当你正在电脑前努⼒学习 C 的时候&#xff0c;另⼀个你正在另⼀个平⾏宇宙⾥努⼒学习…

day15 层序遍历 翻转二叉树 对称二叉树

题目1&#xff1a;102 二叉树的层序遍历 题目链接&#xff1a;102 二叉树的层序遍历 题意 根据二叉树的根节点root&#xff0c;返回其节点值的层序遍历 借助队列实现&#xff0c;因为队列是先进先出的逻辑&#xff0c;符合层序遍历一层一层遍历的思想 代码 /*** Definitio…

Listener监听器----HttpSession对象的生命周期监听器

一、HttpSession对象的生命周期监听器 HttpSessionListener接口定义了HttpSession对象生命周期的监听行为。 void sessionCreated(HttpSessionEvent se) HttpSession对象创建后会触发该监听器方法&#xff0c;并将已创建HttpSession对象传递到该方法中 void sessionDestoryed(…

Linux 管理 Systemd 服务的命令行工具

Linux 管理 Systemd 服务的命令行工具 systemctl 是用于管理 Systemd 服务的命令行工具。下面是一些常用的 systemctl 命令及其功能&#xff1a; 1. systemctl enable <service>&#xff1a;启用一个服务&#xff0c;使其在系统启动时自动启动。 2. systemctl start <…

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载)

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载) 什么是自然语言处理 (NLP) ? 自然语言处理 (NLP) 是计算机科学的一个分支,更具体地说,是人工智能 (AI) 的分支,旨在让计算机能够以与人类大致相同的方式理解文本和语音。 自然语…

Matlab 建文件夹保存本次仿真图表数据和参数

文章目录 前言代码 前言 有时候跑的仿真参数非常多&#xff0c;保存结果的时候需要把仿真参数和数据一起保存&#xff0c;为方便起见&#xff0c;查了一下怎么建文件夹自动保存本次仿真图表数据和参数&#xff0c;再也不用担心忘记结果是什么参数跑出来的了~ 代码 % 定义变量…

C++ 捕获所有异常并拿到错误原因的方法

std::exception_ptr 是 C 标准库中的一种类型&#xff0c;它用于在异常处理过程中保存异常的指针&#xff0c;以便稍后再次处理异常。它的作用是允许异常在不同的上下文中传播并延迟处理&#xff0c;同时保留异常的类型和信息。 使用 std::exception_ptr 可以将异常从一个线程传…

开发代码基础

首先安装驱动&#xff0c;在ARDUINO环境下安装&#xff0c;然后安装开发板&#xff0c;详见哔哩哔哩教程 1&#xff1a;接入点模式&#xff08;也称 AP&#xff09; 通过以下示例程序&#xff0c;NodeMCU将会建立一个名为taichi-maker的WiFI。您可以使用手机或电脑连接该WiFi…

【论文阅读】Self-supervised Learning: Generative or Contrastive

Abstract 研究了在计算机视觉、自然语言处理和图形学习中用于表示的新的自监督学习方法。全面回顾了现有的实证方法&#xff0c;并根据其目的将其归纳为三大类&#xff1a;生成性、对比性和生成性对比&#xff08;对抗性&#xff09;。进一步收集了关于自我监督学习的相关理论…

Vue3 实时显示时间

记录一下代码&#xff0c;方便以后使用 参考的文章链接 做了以下修改 修改了formateDate方法中传入参数这个不合理的地方给定时器增加了间隔时间增加了取消定时器的方法 <!-- template中的代码 --> <span>当前时间&#xff1a;{{ nowTime }}</span>// sc…

Java浮点数精度问题与BigDecimal详解

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们在日常的Java编程中&#xff0c;经常会遇到处理金融数据的情况&#xff0c;比如计算商品的价格或者处理用户的账户余额。在这些场景下&#xff0c;精确的数值计算就显得尤为重要。这时候&#xff0c;BigDeci…

【SPDK】【NoF】使用SPDK实现NVMe over Fabrics Target

本文使用两台PC&#xff0c;一台做NVMe over Fabrics Target&#xff08;服务端&#xff09;&#xff0c;一台做NVMe over Fabrics initiator&#xff08;客户端&#xff09;。首先使用SoftRoCE来实现底层的rdma传输&#xff0c;然后使用SPDK来实现NVMe over Fabrics Target。 …

内存卡为什么会提示格式化,内存卡提示格式化还能恢复吗

对于许多电脑用户来说&#xff0c;执行内存卡格式化操作导致数据丢失是一个常见的问题。在日常生活中&#xff0c;数据丢失的情况并不少见&#xff0c;但内存卡格式化后的数据恢复相对较难。目前&#xff0c;能够使用的方法较少&#xff0c;且成功率较低&#xff0c;但并不是没…

全网快递查询工具:批量查询,提升工作效率的利器

在快递行业日新月异的今天&#xff0c;高效、准确的快递信息管理显得尤为重要。固乔快递查询助手正是一款专为快递网点设计的实用工具&#xff0c;它可以帮助您快速、批量查询全网快递单号&#xff0c;为您的网点运营带来诸多便利。 一、固乔快递查询助手的用途 批量查询&…

java: 5-3 for循环

文章目录 1. for1.1 基本语法1.2 练习1.3 执行流程1.4 细节1.5 编程思想 (练习) 【老韩b站视频笔记p121-p125】 1. for 让你的代码可以循环执行。 1.1 基本语法 for 关键字&#xff0c;表示循环控制。for 有四要素: (1)循环的初始变量。 (2)循环的条件&#xff08;变量条件&…