三角形最小路径和-java

news2024/12/22 20:48:29
  • 题目描述:

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

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

  •   

  • 解题思想:

    • 1.递归求解

      • 观察三角形的性质,可以发现从底部开始向上计算更为方便。因此,可以定义 f(i, j) 为从位置 (i, j) 到底部的最小路径和,其递归关系可以表示为:
        [ f(i, j) = \triangle[i][j] + \min(f(i + 1, j), f(i + 1, j + 1)) ]
        这里,triangle[i][j] 表示三角形中 (i, j) 处的值,而 f(i + 1, j) 和 f(i + 1, j + 1) 分别表示从下一行的相邻位置到底部的最小路径和。我们选择这两者中的较小值,加上当前位置的值,即可得到 f(i, j) 的值。

    • 2.动态规划求解

      • 根据上述递归关系,可以使用动态规划来求解问题。从三角形的底部开始向上逐行计算 f(i, j),直至顶部位置 (0, 0)。具体步骤如下:

        • 从三角形底部开始初始化 f(i, j),即最后一行的元素直接赋值为三角形对应位置的值。
        • 从倒数第二行开始,依次计算每个位置 (i, j) 的 f(i, j),根据递推关系求解:[ f(i, j) = \triangle[i][j] + \min(f(i + 1, j), f(i + 1, j + 1)) ]
        • 最终,f(0, 0) 就是从顶部到底部的最小路径和。

  • 法一: 递归

    • 1.定义递归函数
      • 首先,需要定义一个递归函数,该函数负责解决原始问题的子问题。递归函数的参数通常包括原始输入以及额外的参数用于标识当前处理的位置或状态。

    • 2.确定基本情况
      • 在递归函数中,需要确定基本情况,即递归的终止条件。这些基本情况通常对应于原始问题的最小规模情况,它们的解可以直接计算得到而不需要进一步的递归调用。

    • 3.递归调用
      • 在递归函数中,对于每个子问题,需要通过递归调用相同的函数来解决它。递归调用的参数通常是根据问题的分解而确定的,以便在下一步中处理不同的子问题。

    • 4.返回结果
      • 最后,递归函数需要返回原始问题的解。在递归过程中,每个递归调用都会返回其子问题的解,而在最终的递归调用中,会将所有子问题的解合并为原始问题的解,并返回给调用者。

    • 通过这些步骤,可以构建一个递归算法来解决各种类型的问题。然而,需要注意的是,递归算法可能会面临性能问题和重复计算等挑战,因此在实际应用中需要谨慎使用并考虑其他解决方案。

  • 代码实现(在力扣中, 会出现运行超时的情况, 建议使用动态规划解决)

    • class Solution {
          public int minimumTotal(List<List<Integer>> triangle){
              return dfs(triangle, 0, 0);
          }
      
          public int dfs(List<List<Integer>> triangle, int i, int j){
              if(i == triangle.size()) return 0;
      
              return Math.min(dfs(triangle, i + 1, j), dfs(triangle, i + 1, j + 1)) + triangle.get(i).get(j);
          }
      }

  • 法二: 动态规划

    • 1.首先,我们创建了一个长度为三角形行数加一的数组 dp,用来存储每一行的最小路径和。数组 dp 的索引 i 对应于三角形的第 i 行。

    • 2.然后,我们从三角形的倒数第二行开始向上遍历,对每一行中的每个元素进行处理。

    • 3.在每一行的处理中,我们使用一个内部循环来遍历该行的每个元素。对于当前处理的元素 triangle.get(i).get(j),我们通过比较其下方两个相邻元素的 dp 值,选择较小的那个,并加上当前元素的值。这样就得到了当前位置的最小路径和,并将其存储在 dp[j] 中。

    • 4.在处理完所有行后,dp[0] 中存储的就是整个三角形的最小路径和,因为它是位于三角形顶部的元素,经过了所有行的比较和累加。

    • 5.最后,我们将 dp[0] 返回作为最终结果。

    • 这段代码的时间复杂度为 O(n`2),其中 n 是三角形的行数。因为我们只使用了一个长度为 n + 1 的数组 dp 来存储中间结果,所以空间复杂度为 O(n)。

  • 以下是代码实现:

    • class Solution {
          public int minimumTotal(List<List<Integer>> triangle){
              int[] dp = new int[triangle.size() + 1];
      
              for(int i = triangle.size() - 1; i >= 0; i--){
                  for(int j = 0; j <= i; j++)
                      dp[j] = Math.min(dp[j], dp[j + 1]) + triangle.get(i).get(j);
              }
              return dp[0];
          }
      }

        

  •                             以上是本篇文章的全部内容, 感谢观看

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

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

相关文章

JavaScript教程:从基础到发展历程及语法规则的全面介绍

文章目录 一、JavaScript简介二、JavaScript发展历程三、JavaScript基础语法3.1、变量概念3.2、变量命名3.3、变量提升3.4、代码注释3.5、语句3.6、区块 四、总结 一、JavaScript简介 JavaScript 是一种高级的、解释型的编程语言&#xff0c;主要用于为网页添加交互性和动态效…

网络安全(防火墙,IDS,IPS概述)

问题一:什么是防火墙,IDS,IPS? 防火墙是对IP:port的访问进行限制,对访问端口进行制定的策略去允许开放的访问,将不放开的端口进行拒绝访问,从而达到充当防DDOS的设备。主要是拒绝网络流量,阻断所有不希望出现的流程,禁止数据流量流通,达到安全防护的作用。如将一些恶…

谷歌浏览器快捷键, VScode 快捷键

谷歌浏览器快捷键 谷歌浏览器跳转标签页的方式&#xff1a; control Tab 跳转下一个标签页 control shift tab 上一个标签页 command 1-8 跳转对应的标签页&#xff0c;而command 9 则是跳转最后一个标签页 Previous Tab 插件实现谷歌浏览器两个tab页来回切换。快捷键为…

JVM-结合MAT工具分析OOM问题

JVM-结合MAT工具分析OOM问题 启动项目前配置VM参数 -XX:UseParNewGC -XX:UseConcMarkSweepGC -Xms1m #初始化大小 -Xmx1m #最大值 -XX:PrintGCDetails -Xloggc:gc_dandan.log -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./运行结果截图 使用MAT打开java_pid12164.hprof…

实时时钟模块RX8901CE具有数字温度补偿功能,助力工业设备实现精准控制

在工业控制领域&#xff0c;电子产品的工作温度范围较广&#xff0c;同样的产品将面对高温、低温等不同工况。对于时钟信号敏感的电路设计而言&#xff0c;温度变化将严重影响产品功能&#xff0c;因此需要高精度时钟来保证电路信号的稳定&#xff0c;这种情况下需要使用带数字…

Django实现的登录注册功能

1 前言 在Web开发中&#xff0c;用户登录和注册是最基本且必不可少的功能。Django&#xff0c;作为一个高级的Python Web框架&#xff0c;为我们提供了强大的工具和库来快速实现这些功能。下面&#xff0c;我将详细介绍如何使用Django来实现用户登录和注册功能。 2 功能介绍 …

使用Ollama在本地运行AI大模型gemma

1.下载&#xff1a; https://github.com/ollama/ollama/releases 2.配置环境变量 我的电脑-右键-属性-系统-高级系统设置-环境变量-【系统环境变量】新建 变量名&#xff1a;OLLAMA_MODELS &#xff08;固定变量名&#xff09; 变量值&#xff1a;E:\Ollama\Lib &#xff0…

【状态机dp】【 排序 】 2809使数组和小于等于 x 的最少时间

本文涉及知识点 【状态机dp】 排序 LeetCode 2809. 使数组和小于等于 x 的最少时间 给你两个长度相等下标从 0 开始的整数数组 nums1 和 nums2 。每一秒&#xff0c;对于所有下标 0 < i < nums1.length &#xff0c;nums1[i] 的值都增加 nums2[i] 。操作 完成后 &…

Vue.js高效前端开发(页面验证跳转,查)

效果图 代码&#xff1a; new.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><div id"app"><input type"text" name"" id"&…

SecureCRT通过私钥连接跳板机,再连接到目标服务器(图文教程)

文章目录 1. 配置第一个session&#xff08;跳板机&#xff09;2. 设置本地端口3. 设置全局firewall4. 配置第二个session&#xff08;目标服务器&#xff09; 服务器那边给了一个私钥&#xff0c;现在需要通过私钥连接跳板机&#xff0c;再连接到目标服务器上 &#x1f349; …

Softing WireXpert 4500线缆认证仪的独特之处——双控系统

Softing推出的WireXpert 4500线缆认证仪&#xff0c;可用于结构化布线认证&#xff0c;认证速率高达40Gb/s。该线缆认证仪专为实用性而设计&#xff0c;重量轻&#xff0c;手感舒适&#xff0c;主机与副机均配备6英寸工业LCD触摸屏&#xff0c;使其更适用于布线现场。 WireXper…

4.9总结

多线程 程序内部的执行路径就叫线程&#xff0c;为了满足需求同时执行多个任务&#xff0c;就有了多线程 多线程有两种应用方式&#xff1a; 第一种是并发&#xff1a;在同一时刻&#xff0c;有多个指令在单个CPU上交替运行 第二种是并行&#xff1a;在同一时刻&#xff0c…

网络网络层之(7)PPPOE协议

网络网络层之(7)PPPOE协议 Author: Once Day Date: 2024年4月7日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day…

搜维尔科技:Patchwork 3D工业仿真实时渲染,将CAD 数据转换成真实感的3D模型以用于工业用途

Patchwork 3D工业仿真 实时渲染点击跳转官网 从实时渲染到真实照片 根据工作阶段所需的逼真度&#xff0c;您可以使用三个渲染引擎&#xff0c;从最快的&#xff08;OpenGL&#xff0c;交互式&#xff09;到最逼真的&#xff08;光线跟踪&#xff0c;Iray物理逼真&#xff09;…

数据仓库的概念和作用?如何搭建数据仓库?

随着企业规模的扩大和数据量的爆炸性增长&#xff0c;有效管理和分析海量数据成为企业数字化转型的关键。而在互联网的普及过程中&#xff0c;信息技术已深入渗透各行业&#xff0c;逐渐融入企业的日常运营。然而&#xff0c;企业在信息化建设中面临了一系列困境和挑战&#xf…

皮灵顿靶机1

1 先在kali上扫描靶机ip地址 .1、.2、.254、.138都是kali自身的一些ip地址&#xff0c;所以在此确认要进行攻击的靶机的ip地址为&#xff1a;192.168.84.132 再查看端口&#xff0c;一个22端口一个80端口 我这里使用dirb&#xff0c;查看网站的信息 最特别的是robots.txt …

python如何去掉换行符

使用strip()函数去掉每行结束的\n。 strip()函数 声明&#xff1a;str为字符串&#xff0c;chars为要删除的字符序列。 str.strip(chars&#xff09;&#xff1a;删除s字符串中开头、结尾处&#xff0c;位于chars删除序列的字符。 str.lstrip(chars)&#xff1a;删除s字符串…

vue中使用axios获取不到响应头Content-Disposition的解决办法

项目中&#xff0c;后端返回的文件流; 前端需要拿到响应头里的Content-Disposition字段的值&#xff0c;从中获取文件名 在控制台Headers中可以看到相关的字段和文件名&#xff0c;但是在axios里面却获取不到 如果想要让客户端访问到相关信息&#xff0c;服务器不仅要在head…

maxpool long数据类型报错

报错&#xff1a; RuntimeError: “max_pool2d” not implemented for ‘Long’ 源码&#xff1a; import torch from torch import nn from torch.nn import MaxPool2dinput torch.tensor([[1, 2, 0, 3, 1],[0, 1, 2, 3, 1],[1, 2, 1, 0, 0],[5, 2, 3, 1, 1],[2, 1, 0, 1, 1…

python爬虫-----爬虫解析—xpath(第十八天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…