LeetCode刷题--- 下降路径最小和

news2024/11/13 10:04:15

个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客

个人专栏

力扣递归算法题

 http://t.csdnimg.cn/yUl2I

【C++】    

​​​​​​http://t.csdnimg.cn/6AbpV

数据结构与算法

 ​​​http://t.csdnimg.cn/hKh2l


前言:这个专栏主要讲述动态规划算法,所以下面题目主要也是这些算法做的  

我讲述题目会把讲解部分分为3个部分:
1、题目解析

2、算法原理思路讲解

3、代码实现


下降路径最小和

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

题目

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

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

示例 1:

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

示例 2:

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

提示:

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

解法

题目解析

  1. 给你一个mxn方形整数数组 matrix ,请你找出并返回通过 matrix 的下降路径最小和 。
  2. 下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。
  3. 在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。

算法原理讲解

我们这题使用动态规划,我们做这类题目可以分为以下五个步骤

  1. 状态显示
  2. 状态转移方程
  3. 初始化(防止填表时不越界)
  4. 填表顺序
  5. 返回值

  • 状态显示
dp[i][j] 表⽰:到达 [i, j] 位置时,所有下降路径中的最⼩和。
  • 状态转移方程
对于普遍位置 [i, j] ,根据题意得,到达 [i, j] 位置可能有三种情况:
  • 从正上⽅ [i - 1, j] 位置转移到 [i, j] 位置;
  • 从左上⽅ [i - 1, j - 1] 位置转移到 [i, j] 位置;
  • 从右上⽅ [i - 1, j + 1] 位置转移到 [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]。
  • 初始化(防止填表时不越界)
在本题中,需要「加上⼀⾏」,并且「加上两列」。所有的位置都初始化为⽆穷⼤,然后将第⼀⾏
初始化为 0 即可。
  • 填表顺序

根据「状态表⽰」,填表的顺序是「从上往下」。

  • 返回值

注意这⾥不是返回 dp[m][n] 的值!
题⽬要求「只要到达最后⼀⾏」就⾏了,因此这⾥应该返回「 dp 表中最后⼀⾏的最⼩值」。

代码实现

  • 时间复杂度:O(2^{n}),需要计算每个坐标的和最小下降路径。
  • 空间复杂度:O(2^{n}),需要记录每个坐标的和最小下降路径。因为每个坐标的和最小下降路径仅与上一行有关,因此可以使用滚动数组,使得空间复杂度降低为 O(n)。
class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) 
    {
        // 1.状态显示---------------》dp[i][j]表示最小路径
        // 2.状态转移方程
        // 3.初始化
        // 4.填表方向
        // 5.返回值


        int n = matrix.size();
        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 i = 1; i <= n; i++)
        {
            ret = min(ret, dp[n][i]);
        }

        return ret;
    }
};

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

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

相关文章

服务器迁移上云

一、服务器迁移上云 1、服务器迁移概念&#xff1a; 服务器迁移一般来说是将物理服务器从一个地点&#xff08;物理机房&#xff09;移动到另一个地点&#xff0c;或将数据从一台服务器移动到另一台服务器的过程。 物理服务器迁移场景&#xff1a; ● 机房搬迁&#xff1a;…

松鼠目标检测数据集VOC格式400张

松鼠&#xff0c;一种小巧玲珑、活泼可爱的啮齿类动物&#xff0c;以其蓬松的大尾巴和机敏的动作而广受欢迎。 松鼠通常体型小巧&#xff0c;四肢灵活&#xff0c;尾巴蓬松。它们的耳朵大而直立&#xff0c;眼睛明亮&#xff0c;给人留下了深刻的印象。松鼠的毛色因种类而异&a…

selenium点击链接下载文件,并获取文件

在自动化测试时&#xff0c;有时我们会需要自动化获取下载的文件&#xff0c;这是我们要怎么办呢&#xff0c;跟着我一步步的来获取下载的文件吧 首先声明下&#xff0c;我们需要引入的类 from selenium import webdriver from selenium.webdriver.chrome.options import Op…

练习-指针笔试题

目录 前言一、一维整型数组1.1 题目一1.2 题目二 二、二维整型数组2.1 题目一2.2 题目二2.3 题目三 三、结构体3.1 题目一&#xff08;32位机器运行&#xff09; 四、字符数组4.1 题目一4.2 题目二 总结 前言 本篇文章记录关于C语言指针笔试题的介绍。 一、一维整型数组 1.1 …

使用vue实现一个网页的贴边组件。

使用vue实现一个网页的贴边组件。 先来看效果&#xff1a; 2024-01-04 10.46.22 https://www.haolu.com/share/V00O6HWYR8/36207fc21c35b2a8e09bf22787a81527 下面是具体代码实现&#xff1a; 1、父组件。&#xff08;用于贴边展示的组件&#xff09; <template>&…

[NISACTF 2022]midlevel

[NISACTF 2022]midlevel wp 信息搜集 进入页面&#xff0c;右上角显示了我的真实 IP &#xff1a; 最下面提示&#xff1a;Build With Smarty ! &#xff1a; Smarty 是 PHP 的模板引擎&#xff0c;判断为 Smarty 模板注入。 Smarty 模板注入 推荐博客&#xff1a;Smarty…

uni-app中轮播图实现大图预览

参考效果 当轮播图滑动切换的时候更新自定义下标&#xff0c;当图片被点击的时候大图预览。 参考代码 商品详情页轮播图交互 <script setup lang"ts"> // 轮播图变化时 const currentIndex ref(0) const onChange: UniHelper.SwiperOnChange (ev) > …

SSH远程访问出现Permission denied(password)解决方法

首先&#xff0c;这个不是密码输错了的问题&#xff1b; 1、在主机先ping一下服务器 ping XXX.XXX.XX.XXX (服务器ip地址) 如果pin成功了&#xff0c;说明可以进行连接 查看服务器的ip ifconfig2、主机连接服务器 &#xff08;服务器的ip&#xff09; ssh testXXX.XXX.XX.…

CSS3新增边框样式

边框样式 概念:在CSS3中&#xff0c;针对元素边框增加了丰富的修饰属性。 常见的边框样式属性有以下 属性说明border-radius圆角效果box-shadow边框阴影border-image边框背景 border-radius属性 概念&#xff1a;border-radius属性可以为元素添加圆角效果 语法&#xff1…

Spring 基于注解的AOP见解4

5.基于注解的AOP配置 5.1创建工程 5.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

tiktoken使用问题——ValueError: too many values to unpack (expected 2)

tiktoken使用问题——ValueError: too many values to unpack (expected 2) 文章目录 tiktoken使用问题——ValueError: too many values to unpack (expected 2)前言一、报错原理是什么&#xff1f;二、解决方法1.设置TIKTOKEN_CACHE_DIR为None2.拉取tiktoken源码&#xff0c;…

CAN转RS232学习笔记

2024-1-9 用keil打开工程后&#xff0c;打开main.c文件 报错&#xff1a;error in include chian 网络解决方法&#xff1a; KEIL消除警告&#xff1a;error in include chain(cmsis_armcc.h):expected identifier or ‘(‘-CSDN博客 上文链接包含的链接&#xff08;套娃&am…

生成式人工智能市场规模、趋势和统计数据(2024-2026)

生成式人工智能市场规模、趋势和统计数据&#xff08;2024-2026&#xff09; 目录 生成式人工智能市场规模、趋势和统计数据&#xff08;2024-2026&#xff09;一、生成式人工智能行业亮点二、生成式人工智能市场规模三、生成式人工智能市场增长预测四、生成式人工智能采用统计…

2023到2024年:前端发展趋势展望

本文探讨了2023年至2024年之间前端领域的发展趋势。我们将关注以下几个方面的变化&#xff1a;无代码/低代码开发的兴起、WebAssembly的广泛应用、跨平台技术的发展、人工智能在前端的应用以及用户体验的不断优化。 随着技术的飞速发展&#xff0c;前端开发在推动互联网与移动应…

软件质量模型-8个特性(功能性、性能效率、兼容性、易用性、可靠性、信息安全性、维护性和可移植性)

软件质量模型 软件质量模型将系统、软件产品属性划分为8个特性&#xff1a;功能性、性能效率、兼容性、易用性、可靠性、信息安全性、维护性和可移植性。

解析游戏开发中的ECS设计模式:实体、组件、系统的完美协同

ECS&#xff08;Entity-Component-System&#xff09;是一种设计模式&#xff0c;通常用于构建和管理具有大量实体和复杂交互的系统&#xff0c;尤其在游戏开发中得到广泛应用。这个模式的核心思想是将系统中的组件、实体和系统进行分离&#xff0c;以提高代码的可维护性、可扩…

FineBI实战项目一(7):每天每小时上架商品个数

1 明确数据分析目标 对所有商品的商家时间进行统计&#xff0c;统计每个小时上架商品的个数 2 创建用于保存数据分析结果的表 create table app_hour_goods(id int primary key auto_increment,daystr varchar(20),hourstr varchar(20),cnt int ); 3 编写SQL语句进行数据分析…

鉴源论坛 · 观模丨浅谈Web渗透之信息收集(下)

作者 | 林海文 上海控安可信软件创新研究院汽车网络安全组 版块 | 鉴源论坛 观模 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 信息收集在渗透测试过程中是最重要的一环&#xff0c;“浅谈web渗透之信息收集”将通过上下两篇&#xff0c;对信息收集、…

用PreMaint引领先进的预测性维护

在设备维护领域&#xff0c;预测性维护成为一项利用先进技术和巧妙工具的数据驱动战略。这一战略通过条件监控和数据分析&#xff0c;以主动维护的方式识别潜在的设备缺陷&#xff0c;避免问题升级。高效使用PreMaint预测性维护工具可不仅节省时间和成本&#xff0c;更显著提升…

Eureka的自我保护机制

文章目录 一&#xff1a;Eureka的自我保护机制是什么&#xff1f;二&#xff1a;为什么会出现自我保护机制&#xff1f;三&#xff1a;怎么禁止Eureka的自我保护&#xff1f;3.1&#xff1a;来看看开启自我保护模式的时候&#xff0c;Eureka服务端提示&#xff1a;3.2&#xff…