Leetcode刷题详解——下降路径最小和

1. 题目链接:931. 下降路径最小和

2. 题目描述:

给你一个 n x n方形 整数数组 matrix ,请你找出并返回通过 matrix下降路径最小和

下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)(row + 1, col) 或者 (row + 1, col + 1)

示例 1:

img

输入:matrix = [[2,1,3],[6,5,4],[7,8,9]]
输出:13
解释:如图所示,为和最小的两条下降路径

示例 2:

img

输入:matrix = [[-19,57],[-40,-5]]
输出:-59
解释:如图所示,为和最小的下降路径

提示:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 100
  • -100 <= matrix[i][j] <= 100

3. 解法(动态规划):

3.1算法思路:

3.1.1 状态表示:

dp[i][j]表示:到达[i,j]位置时,所有下降路径中的最小和

3.1.2 状态转移方程:

到达 [i,j]位置可能有三种情况:

请添加图片描述

我们要的是三种情况下的最小值,然后加上矩阵在[i,j]位置

于是dp[i,j]=min(dp[i-1][j],min(dp[i-1][j-1],dp[i-1][j+1]))+matrix[i,j]

3.1.3 初始化

可以在最前面加上一个辅助结点,进行初始化。使用这种技巧需要注意两点:

  1. 辅助结点里面的值要保证后续填表是正确的

  2. 下标的映射关系

  3. 在本题中,需要加上一行,并且加上两列。所有位置都初始化为无穷大,然后将第一行初始化为0即可

请添加图片描述

3.1.4 填表顺序

从上往下

3.1.5 返回值

注意这里不是返回dp[m][n]的值

题目要求:【只要到达最后一行】,因此这里应该返回【dp表最后一行的最小值】

3.2 C++算法代码:

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
        int n=matrix.size();
        //创建dp表
        vector<vector<int>>dp(n+1,vector<int>(n+2,INT_MAX));
        //初始化第一行
        for(int j=0;j<n+2;j++) dp[0][j]=0;
        //填表
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i-1][j+1]))+matrix[i-1][j-1];
            }
        }
        int ret=INT_MAX;
        for(int j=0;j<=n;j++)
        {
            ret=min(ret,dp[n][j]);
        }
        //返回结果
        return ret; 
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UML—时序图是什么

目录 前言: 什么是时序图: 时序图的组成元素&#xff1a; 1. 角色(Actor) 2. 对象(Object) 3. 生命线(LifeLine) 4. 激活期(Activation) 5. 消息类型(Message) 6.组合片段(Combined fragment) 时序图的绘制规则:​ 绘制时序图的3步&#xff1a; 1.划清边界&#xf…

redis-集群切片

切片集群 我曾遇到过这么一个需求&#xff1a;要用 Redis 保存 5000 万个键值对&#xff0c;每个键值对大约是 512B&#xff0c;为了能快速部署并对外提供服务&#xff0c;我们采用云主机来运行 Redis 实例&#xff0c;那么&#xff0c;该如何选择云主机的内存容量呢&#xff…

linux目录与文件管理

目录与路径 关于执行文件路径的变量&#xff1a;$PATH ls完整文件名为&#xff1a;/bin/ls 在任何文件夹下输入ls命令可以显示出一些信息而不是找不到命令&#xff0c;这就是因为环境变量PATH所致。在执行命令时&#xff0c;系统会依照PATH的设置去每个PATH定义的目录下查找文…

【mysql】实现设置表中所有数据的update_time,要求每1000条设置在一天

实现效果示例 执行SQL&#xff1a;&#xff08;mysql 版本查看&#xff1a; select VERSION() &#xff1a;5.7.36-log&#xff09; 实现效果&#xff1a; 这里最后一个id 9 > 总条数 6&#xff0c;所以没有更新到&#xff0c;直接手动补下就行 SELECT * FROM my_test S…

最新ai系统ChatGPT商业运营版网站源码+支持GPT4.0/支持AI绘画+已支持OpenAI GPT全模型+国内AI全模型+绘画池系统

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

全平台七合一万能DIY小程序源码系统 带完整搭建教程

近年来互联网技术的飞速发展&#xff0c;尤其是移动互联网的普及。随着微信、支付宝、百度、抖音、头条等平台的迅速崛起&#xff0c;小程序成为了这些平台上重要的应用形态。这些小程序的应用范围广泛&#xff0c;包括电商、教育、娱乐、生活服务等各个领域。然而&#xff0c;…

常用排序算法

目录 直接插入排序 希尔排序 ​编辑 选择排序 堆排序 冒泡排序 快速排序 hoare版 挖坑法 前后指针法 非递归 归并排序 非递归 计数排序 直接插入排序 直接插入排序跟依次模扑克牌一样&#xff0c;将最后一张牌依次与前面的牌比较&#xff0c;最后将牌插入到指定位…

【设计模式】第16节:行为型模式之“命令模式”

一、简介 命令模式&#xff1a;将请求&#xff08;命令&#xff09;封装为一个对象&#xff0c;这样可以使用不同的请求参数化其他对象&#xff08;将不同请求依赖注入到其他对象&#xff09;&#xff0c;并且能够支持请求&#xff08;命令&#xff09;的排队执行、记录日志、…

分布式理论和分布式锁知识点总结

文章目录 (一) 分布式理论算法和协议1&#xff09;CAP理论总结 2&#xff09;BASE理论BASE 理论的核心思想基本可用软状态最终一致性 3&#xff09;Paxos算法Basic Paxos 算法4&#xff09; Raft算法1 拜占庭将军 5&#xff09;Gossip协议 (二) 分布式锁分布式锁应该具备哪些条…

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库安装 IndexDB类库引入 localForage测试 新增数据、获取数据 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 大部分场景使用 LocalStore都…

mac m1下navicat执行mongorestore 到mongodb

首先&#xff0c;下载https://www.mongodb.com/try/download/mongocli 解压缩后 有可执行文件使用navicat打开 加载后再重新点击 选择 要恢复的文件即可

Vue之CSS基础

CSS&#xff1a;层叠样式表 1、选择器 从模板template中选择某元素进行样式设置 需要注意的是作用域到底是当前模板还是整个html文档 1.1 基础(单一)选择器 标签、类、 id、通配符 标签、直接使用标签名&#xff0c;比如div,span… 优点&#xff1a;全选 模板中的名{。。。}…

数字化时代,谈谈无处不在的大数据和商业智能BI的关系

随着数字化时代的正式到来&#xff0c;众多领域开展了新一轮的科技革命和产业革命&#xff0c;通过大数据或商业智能BI等数据类技术解决方案&#xff0c;完成了从业务、产品到经营模式、管理决策的全方位升级&#xff0c;获得了突破性的成长。 如今&#xff0c;大数据和商业智…

3D模型格式转换工具HOOPS Exchange对工业级3D产品HOOPS的支持与应用

一、概述 HOOPS Exchange是一套高性能模型转换软件库&#xff0c;可以给软件提供强大的模型的导入和导出功能&#xff0c;我们可以将其单独作为转换工具使用&#xff0c;也可以将其集成到自己的软件中。 同样&#xff0c;HOOPS 的其它产品&#xff0c;也离不开HOOPS Exchange…

SpringBoot整合阿里云OSS对象存储

文章目录 1、OSS介绍及开通1.1、阿里云OSS简介1.2、开通OSS 2、创建存储空间bucket及密钥获取2.1、创建存储空间2.2、获取密钥 3、OSS快速入门案例4、在springboot项目中整合4.1、将oss配置放到yml文件中4.2、创建Oss属性类&#xff0c;接收yml文件中的属性4.3、封装文件上传功…

Vue Router使用VueUse更改标签页名称的工具函数

进入正题 安装 npm i vueuse/core or pnpm i vueuse/core or yarn add vueuse/corerouter/helper.js import { useTitle } from vueuse/coreexport const usePageTitle (to) > {const projectTitle import.meta.env.VITE_APP_TITLE // 将可变名抽出到 .env 内配置cons…

docker进阶

文章目录 docker 进阶Part1 常用命令总结docker version 查看docker客户端和服务端信息docker info 查看更加详细信息docker images 列出所有镜像基本用法常用选项 docker search 搜索镜像基本用法示例用法 docker pull 拉取镜像基本用法示例用法 docker rmi 删除镜像基本用法示…

前后端配合实现按钮级操作权限控制

背景 公司项目需要做到按钮级权限限制&#xff0c;至此有了该文&#xff0c;如有错误&#xff0c;请联系博主指出&#xff0c;多多感谢。 角色配置前后端操作 首先最基本的角色配置&#xff0c;配置该类角色有哪些菜单以及那些菜单的哪些按钮权限 菜单及菜单按钮由前端维护&a…

kali搭建docker

kali搭建docker 更新kali源 sudo apt update出错 更新一下密钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ED444FF07D8D0BF6安装docker sudo apt install docker.io -y #安装docker docker -v #docker版本 sudo systemctl status docker #查看docker…

C语言数据结构之数据结构入门

目录 数据结构介绍 数据结构发展史 何为算法 数据结构基础 基本概念和术语 四大逻辑结构&#xff08;Logic Structure&#xff09; 数据类型 理解复杂度概念 时间空间复杂度定义 度量时间复杂度的方法 程序运行时的内存与地址 编程预备 数据结构介绍 数据结构发展…