当前位置: 首页 > news >正文

【力扣】三角形最小路径和

目录

题目

例子

示例 1:

示例 2:

前言

思路

思想

代码

调用的函数

主函数

所有代码

力扣提交的代码

运行结果

小结


题目

给定一个三角形 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

前言

本题是动态规划的一道经典题目,最早出现在1994年的ioi比赛中

经过了20多年的时间,如今已经变成了动态规划的入门必做题

思路

我们可以以下面的图来举例子

设置数据为一个二维数组(或者是一个容器)

放入[2],[3,4],[6,5,7],[4,1,8,3]四组数据

我们可以很简单的看出来——最短路径是2,3,5,1

如果把走到响应的点所得到的和(也就是所求值)定义为一个二维数组的话

我们可以得到一个4*4的二维数组(当然其中有一些是用不到了)

那可以把题目转化为求最底下行数组的值,并且比较大小得出最小值

我可以知晓除去第一列的值,其中随机一列的值只取决上一列与其相邻的值,因此我们可以设置递归函数,第a[i][j]的值只取决与原来数组本身的值加上a[i-1][j]与a[i-1][j-1]的最小值。

从底下迭代是一种方法

但是他会有一个问题,他会重复大量计算相同的数字

比如上面的例子:

第三行第一列以及第二列都需要知道第二行第一列的数字,所以第二行第一列的值会计算两遍

思想

所以结果就是我从上向下迭代

下一行的数字只会取上一行的值,然而上一行的值都是计算好的

不需要重新计算也不存在重复以及浪费时间

有些相当于广度优先了

那么思想有了

就是代码实现了

代码

调用的函数

int minimumTotal(vector<vector<int>>& triangle) {int length_1 = triangle.size();int length_2 = triangle[length_1-1].size();vector <vector<int>> n(length_1, vector<int>(length_1, 0));for (int i = 0; i <= length_1 - 1; i++){if (i == 0){n[0][0] = triangle[0][0];continue;}for (int j = 0; j <= i; j++){if (j == 0){n[i][0] = n[i - 1][0] + triangle[i][0];continue;}if (j == i){n[i][i] = n[i - 1][i - 1] + triangle[i][i];continue;}n[i][j] = min(n[i - 1][j - 1] + triangle[i][j], n[i - 1][j] + triangle[i][j]);}}int min = n[length_1 - 1][0];for (int i = 0; i <= length_2 - 1; i++)if (n[length_1 - 1][i] < min)min = n[length_1 - 1][i];return min;
}

思想就是上面讲到的思想

需要注意的是第一行以及第一列与最后一列要单独考虑

主函数

int main()
{vector <vector<int>>sum_1 = { {2} ,{3,4},{6,5,7},{4,1,8,3} };int min = minimumTotal(sum_1);cout << min << endl;return 0;
}

所有代码

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int minimumTotal(vector<vector<int>>& triangle) {int length_1 = triangle.size();int length_2 = triangle[length_1-1].size();vector <vector<int>> n(length_1, vector<int>(length_1, 0));for (int i = 0; i <= length_1 - 1; i++){if (i == 0){n[0][0] = triangle[0][0];continue;}for (int j = 0; j <= i; j++){if (j == 0){n[i][0] = n[i - 1][0] + triangle[i][0];continue;}if (j == i){n[i][i] = n[i - 1][i - 1] + triangle[i][i];continue;}n[i][j] = min(n[i - 1][j - 1] + triangle[i][j], n[i - 1][j] + triangle[i][j]);}}int min = n[length_1 - 1][0];for (int i = 0; i <= length_2 - 1; i++)if (n[length_1 - 1][i] < min)min = n[length_1 - 1][i];return min;
}
int main()
{vector <vector<int>>sum_1 = { {2} ,{3,4},{6,5,7},{4,1,8,3} };int min = minimumTotal(sum_1);cout << min << endl;return 0;
}

力扣提交的代码

class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {int length_1 = triangle.size();int length_2 = triangle[length_1-1].size();vector <vector<int>> n(length_1, vector<int>(length_1, 0));for (int i = 0; i <= length_1 - 1; i++){if (i == 0){n[0][0] = triangle[0][0];continue;}for (int j = 0; j <= i; j++){if (j == 0){n[i][0] = n[i - 1][0] + triangle[i][0];continue;}if (j == i){n[i][i] = n[i - 1][i - 1] + triangle[i][i];continue;}n[i][j] = min(n[i - 1][j - 1] + triangle[i][j], n[i - 1][j] + triangle[i][j]);}}int min = n[length_1 - 1][0];for (int i = 0; i <= length_2 - 1; i++)if (n[length_1 - 1][i] < min)min = n[length_1 - 1][i];return min;
}
};

运行结果

小结

本期博客介绍了现在的动态规划的经典题目,并且提供了3种方法,

(入了个门,相当于?)

相关文章:

【力扣】三角形最小路径和

目录 题目 例子 示例 1&#xff1a; 示例 2&#xff1a; 前言 思路 思想 代码 调用的函数 主函数 所有代码 力扣提交的代码 运行结果 小结 题目 给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结…...

【Linux】指针常量和常量指针

这个是指针常量&#xff0c;不能修改指向【其实就是引用的原型】&#xff1a;可以理解为const是否限制了星号 这个是常量指针&#xff0c;可以改指向&#xff0c;不能改值&#xff1a;...

LCP 22.黑白方格画

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCP 22. 黑白方格画 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 分别计算当涂0行&#xff0c;1行&#xff0c;2行.......时能否满足要求&#xff0c;若能&#xff…...

Java并发编程第8讲——ThreadLocal详解

ThreadLocal无论是在项目开发还是面试中都会经常碰到&#xff0c;它的重要性可见一斑&#xff0c;本篇文章就从ThreadLocal的使用、实现原理、核心方法的源码、内存泄漏问题等展开介绍一下。 一、什么是ThreadLocal ThreadLocal是java.lang下面的一个类&#xff0c;在JDK 1.2版…...

2023复旦大学计算机科学技术(网络空间安全)保研记录

BG&#xff1a;中九rank前5&#xff05;、科研经历少、无竞赛 复旦大学计算机科学与技术--网络空间安全方向&#xff0c;参营4天&#xff08;6.26-6.29&#xff09;&#xff0c;管午饭&#xff0c;住宿自理 6.26--报道听会&#xff0c;6.27--听会&#xff0b;实验室参观 给了…...

linux系统通过docker安装python的jieba,如何找到jieba路径替换分词文件

1、安装python镜像 python镜像名为 jetz_python3.7.131、进入容器 首次安装镜像后,容器启动,进入容器中,其中py37是容器名称,后面会一直用到 docker run -it --name py37 jetz_python3.7.13 /bin/bash如果进入过容器退出了,而容器已存在,上面的的 命令会报错,直接根…...

Python Functions-函数

目录 创建函数 调用函数 参数还是自变量&#xff1f; 参数数量 任意参数&#xff0c;*args 关键字参数 任意关键字参数&#xff0c;**kwargs 默认参数值 将列表作为参数传递 The pass Statement 递归 函数是一个只有在被调用时才运行的代码块。 可以将称为参数的数…...

【人工智能】机器学习的入门与提升

目录 1.入门 1.1.从何处开始 1.2.数据集 1.3.数据类型 2.平均中位数模式 2.1.均值、中值和众数 2.2.均值 2.2.1.实例 2.2.2.运行结果 2.3.中值 2.3.1.实例 2.3.2.运行结果 2.3.3.实例 2.3.4.运行结果 2.4.众数 2.4.1.实例 2.4.2.运行结果 2.5.章节总结 3.标准…...

WEB漏洞原理之---【XMLXXE利用检测绕过】

文章目录 1、概述1.1、XML概念1.2、XML与HTML的主要差异1.3、XML代码示例 2、靶场演示2.1、Pikachu靶场--XML数据传输测试玩法-1-读取文件玩法-2-内网探针或攻击内网应用&#xff08;触发漏洞地址&#xff09;玩法-3-RCE引入外部实体DTD无回显-读取文件开启phpstudy--apache日志…...

element-table排序icon没有点亮

<el-table :data"tableData" ref"tableRef"border :sort"defaultSort":default-sort"defaultSort"><el-table-column sortable :sort-orders"sortOrder" prop"date" label"日期"> </el-…...

传统的经典问题 Java 的 Interface 是干什么的

传统的经典问题 Java 的 Interface 是干什么 解答 上面的这个问题应该还是比较好回答的吧。 只要你做过 Java &#xff0c;通常 Interface 的问题多多少少会遇到&#xff0c;而且可能会遇到一大堆。 在JAVA编程语言中是一个抽象类型&#xff08;Abstract Type&#xff09;&…...

Linux 文件 目录管理

Linux 文件 基本属性 Linux 系统是一种典型的多用户系统&#xff0c;为了保护系统的安全性&#xff0c;不同的用户拥有不同的地位和权限。Linux 系统对不同的用户访问同一文件&#xff08;包括目录文件&#xff09;的权限做了不同的规定。 可以使用命令&#xff1a;ll 或 ls –…...

QT信号槽实现原理

定义Q_OBJECT宏 在宏中声明了几个重要的成员变量及成员函数&#xff0c;包括声明了一个只读的静态成员变量static MetaObject&#xff0c;以及3个public的成员函数 static const QMetaObject staticMetaObject; virtual const QMetaObject *metaObject() const; virtual void …...

7-7 求鸡兔数量

老张家养了很多鸡和兔&#xff0c;圈养在一个笼子里&#xff0c;清早起来老张站在笼子旁边数了数头的个数&#xff0c;蹲下来又数了数脚的个数&#xff0c;你能帮他快速算出来鸡兔各有多少只吗&#xff1f;如实在算不出来&#xff0c; 就提示“error” 输入格式: 输入头的个数…...

CTF 全讲解:[SWPUCTF 2022 新生赛]webdog1__start

文章目录 参考环境题目learning.php信息收集isset()GET 请求查询字符串全局变量 $_GET MD5 绕过MD5韧性脆弱性 md5()弱比较隐式类型转换字符串连接数学运算布尔判断 相等运算符 MD5 绕过科学计数法前缀 0E 与 0e绕过 start.php信息收集头部检索 f14g.php信息收集 探秘 F1l1l1l1…...

聊天机器人

收集窗帘相关的数据 可以用gpt生成&#xff0c;也可以用爬虫 图形化界面 gradio 向量数据库 faiss python代码 import gradio as gr import random import timefrom typing import Listfrom langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstor…...

肖sir__mysql之综合题练习__013

数据库题&#xff08;10*5&#xff09; 下面是一个学生与课程的数据库&#xff0c;三个关系表为&#xff1a; 学生表S&#xff08;Sid&#xff0c;SNAME,AGE,SEX&#xff09; 成绩表SC&#xff08;Sid&#xff0c;Cid&#xff0c;GRADE&#xff09; 课程表C&#xff08;Cid&…...

阿里云服务器部署安装hadoop与elasticsearch踩坑笔记

2023-09-12 14:00——2023.09.13 20:06 目录 00、软件版本 01、阿里云服务器部署hadoop 1.1、修改四个配置文件 1.1.1、core-site.xml 1.1.2、hdfs-site.xml 1.1.3、mapred-site.xml 1.1.4、yarn-site.xml 1.2、修改系统/etc/hosts文件与系统变量 1.2.1、修改主机名解…...

Golang 中 int 类型和字符串类型如何相互转换?

在日常开发中&#xff0c;经常需要将数字转换为字符串或者将字符串转换为数字。在 Golang 中&#xff0c;有一些很简便的方法可以实现这个功能&#xff0c;接下来就详细讲解一下如何实现 int 类型和字符串类型之间的互相转换。 使用 strconv 包 strconv 包提供的 Itoa 和 Ato…...

**20.迭代器模式(Iterator)

意图&#xff1a;提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不需要暴露该对象的内部表示。 上下文&#xff1a;集合对象内部结构常常变化各异。对于这些集合对象&#xff0c;能否在不暴露其内部结构的同时&#xff0c;让外部Client透明地访问其中包含的元素…...

Windows 11本地部署最新大模型深度方案

一、方案概述 随着大语言模型的快速发展&#xff0c;本地部署已成为保护数据隐私、降低API成本的重要选择。本方案将详细介绍在Windows 11系统上部署最新大模型的完整流程&#xff0c;包括硬件配置、环境搭建、模型选择和性能优化。 二、硬件配置要求 2.1 最低配置 GPU: NVIDIA…...

Seabay:AI应用开发的一站式工具箱,解决配置、数据、服务化与监控难题

1. 项目概述&#xff1a;Seabay&#xff0c;一个面向AI应用开发的“一站式”工具集最近在GitHub上看到一个挺有意思的项目&#xff0c;叫seapex-ai/seabay。乍一看这个名字&#xff0c;可能会联想到“海贝”或者“海港”&#xff0c;但它的定位其实非常明确&#xff1a;一个为A…...

castAR混合现实头显:从光学投影到空间锚定的技术解析

1. 项目概述&#xff1a;从Kickstarter到技术现实&#xff0c;castAR的独特魅力2013年&#xff0c;当Oculus Rift在虚拟现实领域掀起第一波热潮时&#xff0c;一封来自技术爱好者的邮件&#xff0c;将一个名为castAR的项目推到了我的视野中心。这不仅仅是一个头戴显示设备&…...

别再写for循环了!用Java8的groupingBy,一行代码搞定员工按城市分组统计

告别繁琐循环&#xff1a;Java8 groupingBy在数据分组统计中的革命性应用 每次面对从数据库查询出的员工列表&#xff0c;需要按城市、部门或职级进行分组统计时&#xff0c;你是否还在写着重复的for循环&#xff1f;那些嵌套的if判断、临时变量和累加操作不仅让代码臃肿不堪&a…...

IGBT驱动技术革新:SCALE-iDriver磁隔离方案解析

1. IGBT驱动技术演进与SCALE-iDriver的突破在电力电子系统中&#xff0c;IGBT&#xff08;绝缘栅双极型晶体管&#xff09;作为核心功率开关器件&#xff0c;其驱动电路的性能直接决定了整个系统的效率和可靠性。传统IGBT驱动方案主要面临三大技术瓶颈&#xff1a;首先是隔离技…...

3分钟掌握PC端聊天软件防撤回:RevokeMsgPatcher实战指南

3分钟掌握PC端聊天软件防撤回&#xff1a;RevokeMsgPatcher实战指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.…...

Naftis架构设计原理:从Golang后端到React前端的完整技术栈

Naftis架构设计原理&#xff1a;从Golang后端到React前端的完整技术栈 【免费下载链接】naftis An awesome dashboard for Istio built with love. 项目地址: https://gitcode.com/gh_mirrors/na/naftis Naftis是一款专为Istio服务网格设计的现代化Web仪表板&#xff0c…...

从零到一:51单片机蓝牙遥控车实战指南(附避坑要点)

1. 项目背景与准备 作为一个非硬件专业的爱好者&#xff0c;我第一次接触51单片机时完全是一头雾水。记得当时因为特殊原因在家闲着&#xff0c;突发奇想做个蓝牙遥控车玩玩。没想到这个简单的想法&#xff0c;让我踩遍了新手能遇到的所有坑。现在回头看&#xff0c;其实用51单…...

RAG提示工程失效?NotebookLM上下文压缩机制深度拆解,3类文档结构适配公式即拿即用

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;RAG提示工程失效的底层归因与NotebookLM破局逻辑 RAG&#xff08;Retrieval-Augmented Generation&#xff09;系统在真实场景中频繁遭遇“提示失焦”现象——检索结果与生成目标语义脱节&#xff0c;导…...

如何在3分钟内安装TrollStore?TrollInstallerX终极指南

如何在3分钟内安装TrollStore&#xff1f;TrollInstallerX终极指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾想过在不越狱的情况下自由安装iOS应用&#…...