面试算法100:三角形中最小路径之和

题目

在一个由数字组成的三角形中,第1行有1个数字,第2行有2个数字,以此类推,第n行有n个数字。例如,下图是一个包含4行数字的三角形。如果每步只能前往下一行中相邻的数字,请计算从三角形顶部到底部的路径经过的数字之和的最小值。从三角形顶部到底部的路径数字之和的最小值为11,对应的路径经过的数字用阴影表示。
在这里插入图片描述
说明:从三角形顶部到底部的路径数字之和的最小值为11,对应的路径经过的数字用阴影表示

分析

可以移动三角形每行的位置使它们左端对齐
在这里插入图片描述
可以用f(i,j)表示从三角形的顶部出发到达行号和列号分别为i和j(i≥j)的位置时路径数字之和的最小值,同时用T[i][j]表示三角形行号和列号分别为i和j的数字。如果三角形中包含n行数字,那么f(n-1,j)的最小值就是整个问题的最优解。

public class Test {public static void main(String[] args) {List<Integer> list1 = Arrays.asList(2);List<Integer> list2 = Arrays.asList(3, 4);List<Integer> list3 = Arrays.asList(6, 5, 7);List<Integer> list4 = Arrays.asList(4, 1, 8, 3);List<List<Integer>> triangle = Arrays.asList(list1, list2, list3, list4);int result = minimumTotal(triangle);System.out.println(result);}public static int minimumTotal(List<List<Integer>> triangle) {int size = triangle.size();int[][] dp = new int[size][size];for (int i = 0; i < size; i++) {for (int j = 0; j <= i; j++) {dp[i][j] = triangle.get(i).get(j);if (i > 0 && j == 0) {// 最左边dp[i][j] += dp[i - 1][j];}else if (i > 0 && i == j) {// 最右边dp[i][j] += dp[i - 1][j - 1];}else if (i > 0) {dp[i][j] += Math.min(dp[i - 1][j], dp[i - 1][j - 1]);}}}int min = Integer.MAX_VALUE;for (int num : dp[size - 1]) {// 答案在最底层,选出一个最小的min = Math.min(min, num);}return min;}
}

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

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

相关文章

强烈推荐!这8款在线画图工具好用极了

即时设计 即时设计作为一种简单的绘图工具&#xff0c;为创作者提供了一个方便而强大的创作平台&#xff0c;具有丰富的绘图工具、实时合作、矢量绘图和组件设计系统等功能。即时设计可以满足不同的创作需求&#xff0c;使创意自由流动。 强大的矢量编辑工具 即时设计提供了…

苹果电脑Markdown文本编辑Typora mac功能介绍

Typora mac是一款跨平台的Markdown编辑器&#xff0c;支持Windows、MacOS和Linux操作系统。它具有实时预览功能&#xff0c;能够自动将Markdown文本转换为漂亮的排版效果&#xff0c;让用户专注于写作内容而不必关心格式调整。Typora Mac版除了支持常见的Markdown语法外&#x…

C++每日一练(14):对称矩阵的判定

题目描述 输入矩阵的行数&#xff0c;再依次输入矩阵的每行元素&#xff0c;判断该矩阵是否为对称矩阵&#xff0c;若矩阵对称输出“yes"&#xff0c;不对称输出”no“。 输入 第一行输入一个正整数N&#xff08;N<20&#xff09;&#xff0c;表示矩阵的行数&#xff0…

网络通信(12)-C#TCP客户端封装帮助类实例

本文使用Socket在C#语言环境下完成TCP客户端封装帮助类的实例。 实例完成的功能: 客户端与服务器连接,实现实时刷新状态。 客户端接收服务器的数据。 客户端发送给服务器的数据。 客户端实时判定状态,断开连接后自动重连。 客户端与服务器端发送心跳包。 在VS中创建C…

IntelliJ IDEA 如何编译 Maven 工程项目

在当今的Java开发领域&#xff0c;Maven已经成为项目构建和依赖管理的标准工具。IntelliJ IDEA作为一款集成度高的Java开发环境&#xff0c;提供了许多强大的功能来简化和优化Maven项目的构建流程。本文将深入介绍如何使用IntelliJ IDEA编译Maven工程的详细步骤以及一些高级技巧…

Wargames与bash知识11

Wargames与bash知识11 bandit19 关卡提示&#xff1a; 要获得对下一级别的访问权限&#xff0c;您应该使用家目录中的setuid二进制文件。在不带参数的情况下执行它&#xff0c;以了解如何使用。在使用setuid二进制文件后&#xff0c;可以在通常的位置&#xff08;/etc/bandit…

Lumerical Monitors------ Global properties

Lumerical Monitors------ Global properties Global properties 全局属性 Global properties 全局属性 在 Lumerical 中&#xff0c;这里以 FDTD 工程文件举例&#xff0c;所有的 monitors 都可以通过上方选项卡中的 monitor 标签页添加。 注意上面有一个 Global properties…

【WinForm.NET开发】自定义控件

本文内容 基控件类创建自己的控件用户控件扩展控件 可使用 Windows 窗体开发和实现新的控件。 可以创建新的用户控件&#xff0c;通过继承来修改现有控件&#xff0c;或编写可自行绘制的自定义控件。 本文重点介绍各种可继承控件之间的差异&#xff0c;并提供有关如何为项目选…

MS3814:DVI/HDMI TMDS FR-4 和电缆均衡器/驱动器

产品简述 MS3814 是一款 TMDS 均衡 / 驱动器芯片&#xff0c;用于补偿 FR-4 和 电缆到 DVI/HDMI 连接器的损耗。提供完全满足 DVI/HDMI TMDS 要求的输出。芯片还可用于 DVI/HDMI 电缆以延长传输距离&#xff0c;提 高连接器接收侧电缆通道的抖动余量。片上 TMDS…

Prometheus 与 VictoriaMetrics对比

公众号「架构成长指南」&#xff0c;专注于生产实践、云原生、分布式系统、大数据技术分享 时序数据库有很多&#xff0c;比如Prometheus、M3DB、TimescaleDB、OpenTSDB、InfluxDB等等。Prometheus和VictoriaMetrics是开源的时间序列数据库&#xff0c;在复杂的环境中提供了强大…

给充电桩嵌入一个强大的“心脏”——工控机

到底什么样的工控机才算是真正的好用&#xff1f; 小编还特地去问了技术老王 他表示&#xff1a;稳定第一&#xff0c;性能第二&#xff01; 不稳定&#xff0c;性能再好也白搭&#xff01; 什么是工控机呢&#xff1f; 工控机是一种专门为工业现场而设计的计算机设备&…

鸿蒙开发已解决The module to import is incompatible with the current project

文章目录 项目场景:问题描述原因分析:解决方案:心得体会:知识点OpenHarmony:HarmonyOS:项目场景: 报错: The module to import is incompatible with the current project 问题描述 希望通过 import module 将该模块引入到我的项目。 导入后出现错误,因为项目和模

JavaScript高级程序设计读书记录(八):对象的使用及创建

ECMA-262 将对象定义为一组属性的无序集合。严格来说&#xff0c;这意味着对象就是一组没有特定顺序的 值。对象的每个属性或方法都由一个名称来标识&#xff0c;这个名称映射到一个值。正因为如此&#xff08;以及其他还未 讨论的原因&#xff09;&#xff0c;可以把 ECMAScri…

imx7开机自动执行任务(点灯)

前提&#xff1a; 已正确配置设备树&#xff0c;可以在用户空间控制GPIO。 启动脚本&#xff1a; 创建shell脚本xx.sh&#xff0c;给与执行权限chmod x xx.sh&#xff0c;以便当Linux启动时自启动执行。 #!/bin/bash# 设置GPIO引脚编号 GPIO_PIN166# 导出GPIO引脚 echo $GPI…

kubernetes Namespace Labels 详解

写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 namespace 实现资源分组&#xff0c;label实现业务分组 Namespace 基础理论 最重…

使用 std::forward 的作用---完美转发

std::forward是什么 使用 std::forward 是为了实现完美转发&#xff08;perfect forwarding&#xff09;。 完美转发是一种技术&#xff0c;用于将函数模板的参数按原始类型转发给其他函数或对象。它可以保持原始参数的值类别&#xff08;lvalue 或 rvalue&#xff09;和 con…

科技创新创业

科技创新创业是一个涉及多个方面的过程&#xff0c;主要包括以下几个方面&#xff1a; 创意产生&#xff1a;创业的起始点通常是一个新的创意或想法&#xff0c;这可能是一个新的产品、服务或技术的概念。这个创意需要独特且具有商业潜力。市场调研&#xff1a;一旦有了创意&a…

行业赋能|同创永益出席数据中心业务连续性管理国标应用推广研讨会

2023年12月7日&#xff0c;ITSS数据中心业务连续性管理国标应用推广研讨会在上海交通银行浦江数据中心召开。来自交通银行、浦发银行、太平洋保险、上证数据、海通证券、国泰君安、申万宏源、太平保险、中债登、神州信息、翰纬科技、同创永益等单位20余名专家出席会议&#xff…

2024第15届电子教育、电子商务、电子管理和电子学习国际会议

第十五届电子教育、电子商务、电子管理和电子学习国际会议&#xff08;IC4E 2024&#xff09;将于2024年3月18日-21日在日本福冈举办。本次会议以电子技术为核心&#xff0c;围绕电子教育、电子商务、电子管理以及电子学习等各个方面展开研讨&#xff0c;为相关领域的专家学者们…