首页 > 其他分享 >LeetCode 931. 下降路径最小和

LeetCode 931. 下降路径最小和

时间:2025-01-23 11:29:06浏览次数:3  
标签:第一行 matrix minVal int 路径 数组 931 LeetCode dp

题目描述

解题思路

这个问题可以通过动态规划来解决。我们定义一个二维数组 dp,其中 dp[i][j] 表示从第一行到第 i 行,且第 i 行选择第 j 列元素的最小路径和。我们可以从第一行开始,逐行计算 dp 数组的值。

算法步骤

  1. 初始化 dp 数组的第一行与 matrix 的第一行相同,因为第一行的元素可以直接到达。

  2. 从第二行开始,对于每一行的每个元素 matrix[i][j],找到其上方、左上方和右上方的最小路径和,并加上当前元素的值,更新 dp[i][j]

  3. 在计算完 dp 数组的最后一行后,找到其中的最小值,即为通过 matrix 的下降路径的最小和。

代码实现

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
        int n = matrix.size();
        vector<vector<int>> dp(n, vector<int>(n));
        
        // 初始化dp数组的第一行为matrix的第一行
        for (int i = 0; i < n; i++) {
            dp[0][i] = matrix[0][i];
        }
        
        // 从第二行开始计算dp数组
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int minVal = INT_MAX;
                // 找到当前位置上方、左上方和右上方的最小值
                for (int k = -1; k <= 1; k++) {
                    int col = j + k;
                    if (col >= 0 && col < n) {
                        minVal = min(minVal, dp[i - 1][col]);
                    }
                }
                // 更新dp数组
                dp[i][j] = matrix[i][j] + minVal;
            }
        }
        
        // 找到dp数组的最后一行中的最小值
        int minSum = INT_MAX;
        for (int i = 0; i < n; i++) {
            minSum = min(minSum, dp[n - 1][i]);
        }
        
        return minSum;
    }
};

复杂度分析

  • 时间复杂度:O(n3),其中 n 是矩阵的行数(或列数)。我们需要三层循环来计算 dp 数组的值。

  • 空间复杂度:O(n2),用于存储 dp 数组。

总结

这个问题是一个典型的动态规划问题,通过定义状态转移方程并逐行计算 dp 数组的值,我们可以找到通过矩阵的下降路径的最小和。这种方法不仅适用于这个问题,也可以推广到其他类似的路径问题中。

标签:第一行,matrix,minVal,int,路径,数组,931,LeetCode,dp
From: https://blog.csdn.net/makeke123456/article/details/145300003

相关文章

  • leetcode155.最小栈
    leetcode155.最小栈思路用两个栈,一个用来存本身,一个用来存最小值。代码#include<iostream>#include<memory>#include<stack>classMinStack{public:MinStack(){}voidpush(intval){_normal_stack.push(val);if(_min_stack.empty......
  • 腾讯通停服后升级迁移路径,与RTX消息互联互通,可并行使用
    一、腾讯通RTX继续使用的主要挑战自腾讯通RTX停止更新并下架官网后,用户不仅无法获得更新和技术支持,还面临着许多重要的挑战:●不支持国产系统和移动端:腾讯通RTX仅兼容Windows和Mac系统,无法在国产操作系统及移动设备上正常运行。●组织架构同步存在缺陷:腾讯通RTX在组织架构同步......
  • LeetCode 8. 字符串转换整数 (atoi)
    题目原题链接:LeetCode8.字符串转换整数(atoi)思路题目首先要判断空格。将前面的空格先一个个扣除。扣完空格记得判断是否到达字符串末尾。然后判断符号。用一个int存符号,正数为1,负数为-1。接下来题目又说前置零又说非数字字符又说数字,理一下思路,其实就是判断是否是数字,是......
  • 路径规划之启发式算法之二十七:果蝇优化算法(Fruit Fly Optimization Algorithm,FOA)
            果蝇优化算法(FruitFlyOptimizationAlgorithm,FOA)是一种基于果蝇觅食行为的仿生学原理而提出的新兴群体智能优化算法。是众多群体智能算法之一,可看我的文章:仿生的群体智能算法总结之二(十种)_群体仿生智能-CSDN博客仿生的群体智能算法总结之二(十种)_群体仿生智......
  • LeetCode 7. 整数反转
    原题链接:LeetCode7.整数反转思路方法1:数学方法使用数学方法。扣出数字的每一位,使用r=r*10+x%10公式将数字反转,判断是否溢出。判断溢出时可以安全判断,比如x为正数时,将r*10+x%10>Integer.MAX_VALUE转化成r>(Integer.MAX_VALUE-x%10)/10判断,不会在判......
  • 腾讯通RTX停更后升级路径,兼容移动端和Linux系统
    一、腾讯通RTX继续使用的核心痛点随着腾讯通RTX停止更新并下架官网,用户无法再获得技术支持、版本更新和资源下载服务,日常办公面临诸多不便。以下几个问题尤为突出:●不兼容国产系统与移动端:腾讯通RTX仅支持Windows和Mac系统,无法运行在统信UOS、银河麒麟等国产操作系统和Android......
  • 【教学类-13-06】20240119数字色块图的代码优化-简化代码路径+班级位置空缺
    背景需求:第一笔有客户购买“9图的数字像素图”,我都没有在百度网盘里备份。  ​​​​​​​打开代码文件夹,发现生成的PDF很多,不知道是哪一个?找到是这份,可是里面有大1班了,客户不一定是大1班。所以word模版的班级要空着,就需要修改模版删除中3的文字,按四个空格(2个汉......
  • 以下是设置Hugging Face `from_pretrained` 默认保存路径的完整解决方案:
    以下是设置HuggingFacefrom_pretrained默认保存路径的完整解决方案:方法1:通过环境变量全局设置在代码或系统环境变量中设置模型缓存路径:importosfrompathlibimportPath#设置自定义缓存路径(推荐使用绝对路径)CUSTOM_CACHE_DIR="/path/to/your/model_cache"......
  • 基于Java的学生选课系统设计与实现 毕业设计源码13931
    摘要在当今快节奏的高等教育环境中,学生选课系统的重要性愈发凸显。曾经,学生在选课时需要排长队、填表格,繁琐而低效。为解决这一难题,本研究设计并实现了一套智能化学生选课系统。这一系统不仅为学生提供了便捷的选课服务,也为教务管理带来了新的机遇。通过系统的开发,我旨在提......
  • 【LeetCode 刷题】栈与队列-基础操作
    此博客为《代码随想录》字符串章节的学习笔记,主要内容为栈与队列基础操作相关的题目解析。文章目录232.用栈实现队列225.用队列实现栈232.用栈实现队列题目链接classMyQueue:def__init__(self):self.in_s,self.out_s=[],[]......