LeetCode·每日一题·931. 下降路径最小和·记忆化搜索

作者:小迅
链接:https://leetcode.cn/problems/minimum-falling-path-sum/solutions/2341965/ji-yi-hua-sou-suo-zhu-shi-chao-ji-xiang-3n58v/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目

 

示例

 

思路

题意 -> 给定一个二维数组,返回从第一行到最后一行路径和最小值

简单直接的做法是将所有路径和都求出来,然后从所有路径和中寻找最小值返回。

使用递归即可解决上述问题,就是一个深度优先搜索过程,对于每一个位置都有三种下一步方法,每次取三种方法中最小值返回,从下往上筛选最小值,最后返回值肯定是最小值。枚举所有起始位置,取最小值即可。

int dfs(int **matrix, int n, int m, int i, int j)
{if (j < 0 || j >= m) return INT_MAX;if (i == n-1) return  matrix[i][j];int left = INT_MAX, mid = INT_MAX, right = INT_MAX;left = dfs(matrix, n, m, i + 1, j - 1);mid = dfs(matrix, n, m, i + 1, j);right = dfs(matrix, n, m, i + 1, j + 1);return fmin(fmin(left, mid), right) + matrix[i][j];
}

对于不同的起始位置,中间路程却存在很多相同的地方,而上述方法中对于中间重复地方还是会递归枚举,存在很多重复计算,可以使用数组对走过的路径进行记录,当下次在到当前位置时直接返回数组记录的值,上述方法就为 记忆化搜索。

代码注释超级详细

代码


int dfs(int **matrix, int n, int m, int i, int j, int (*ans)[m])
{if (j < 0 || j >= m) return INT_MAX;//越界无效值if (ans[i][j] != INT_MAX) return ans[i][j];//重复路径if (i == n-1) return matrix[i][j];//底部返回int left = INT_MAX, mid = INT_MAX, right = INT_MAX;left = dfs(matrix, n, m, i + 1, j - 1, ans);//左边路径mid = dfs(matrix, n, m, i + 1, j,  ans);//中间路径right = dfs(matrix, n, m, i + 1, j + 1, ans);//右边路径//保存当前位置路径最小值,记忆化保存ans[i][j] = fmin(fmin(left, mid), right) + matrix[i][j];return  ans[i][j];
}
int minFallingPathSum(int** matrix, int matrixSize, int* matrixColSize){int min = INT_MAX;int n = matrixSize, m = matrixColSize[0];int ans[n][m];for (int i = 0; i < n; ++i) {//记忆化数组初始化for (int j = 0; j < m; ++j) {ans[i][j] = INT_MAX;}} for (int i = 0; i < m; ++i) {//枚举每一个起点位置int sum = dfs(matrix, n, m, 0, i, ans);min = fmin(min, sum);//保存最小值路径}return min;
}作者:小迅
链接:https://leetcode.cn/problems/minimum-falling-path-sum/solutions/2341965/ji-yi-hua-sou-suo-zhu-shi-chao-ji-xiang-3n58v/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

既好用还不贵!云服务器选型六大理由 ,最后两条直击用户内心

“预算不够&#xff0c;腾讯云、百度云、阿里云&#xff0c;到底购买哪个更划算?”这个问题&#xff0c;很多朋友都跟我提过&#xff0c;选择最适合的云服务提供商并不是一件轻松的任务&#xff0c;因为每家公司都有各自的优势和限制。 **拿我接触的一个例子说一说&#xff…

【MQTT】Esp32数据上传采集:最新mqtt插件(支持掉线、真机调试错误等问题)

前言 这是我在Dcloud发布的插件-最完整Mqtt示例代码&#xff08;解决掉线、真机调试错误等问题&#xff09;&#xff0c;经过整改优化和替换Mqtt的js文件使一些市场上出现的问题得以解决&#xff0c;至于跨端出问题&#xff0c;可能原因有很多&#xff0c;例如&#xff0c;合法…

Linux slab 分配器源码解析

文章目录 前言一、slab分配器1.1 简介1.2 高速缓存描述符1.3 架构图 二、相关结构体2.1 struct array_cache2.2 struct kmem_list32.3 struct slab2.3.1 简介2.3.2 OFF_SLAB 三、创建和释放slab3.1 创建slab3.1.1 kmem_getpages3.1.2 alloc_slabmgmt3.1.3 slab_map_pages 3.2 释…

MySQL之DML和DDL

1、显示所有职工的基本信息&#xff1a; 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表&#xff0c;名为工作日期表。 …

套接字属性

一、选项的级别 1. 基本概念 设置套接字的选项对套接字进行控制 除了设置选项外&#xff0c;还可以获取选项 选项的概念相当于属性&#xff0c;所以套接字选项也可说是套接字属性 有些选项&#xff08;属性&#xff09;只可获取&#xff0c;不可设置&#xff1b; 有些选项既可…

AtcoderABC258场

A - When? A - When? 题目大意 给定一个整数K&#xff0c;表示从日本标准时间21:00开始经过的分钟数。要求将该时间转换为24小时制的时间&#xff08;HH:MM格式&#xff09;。 思路分析 可直接分时间打印。关于格式&#xff0c;填充0&#xff0c;打印时间&#xff0c;题解…

git学习笔记

up:b站迷斯特航 两个版本的项目版本控制&#xff1a; 分支操作&#xff1a; 基本操作&#xff1a; 克隆远程项目到本地&#xff1a; git clone https://github.com/zhoeujei/rknn-coal-ai.git 修改提交到本地仓库&#xff1a;git add rknn_yolov5_demo/CMakeLists.txt&#…

使用C语言连接MySQL

目录 一、引入库 1.1 下载库文件 1.2 在项目中引入库 二、使用库 2.1 连接数据库 2.2 SQL请求 2.3 获取查询结果 2.4 使用案例 一、引入库 1.1 下载库文件 要使用C语言连接MySQL&#xff0c;需使用MySQL官网提供的库 MySQL :: Download Connector/Chttps://dev.mysq…

unbuntu 22.04 安装和卸载企业微信

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 记录有关在ubuntu22.04上安装和卸载企业微信 以及企业微信无法打开问题处理 1. 正文 1.1 安装 下载wine环境 http://archive.ubuntukylin.com/softwar…

【动手学习深度学习--逐行代码解析合集】15卷积神经网络(LeNet)

【动手学习深度学习】逐行代码解析合集 15卷积神经网络&#xff08;LeNet&#xff09; 视频链接&#xff1a;动手学习深度学习–卷积神经网络&#xff08;LeNet&#xff09; 课程主页&#xff1a;https://courses.d2l.ai/zh-v2/ 教材&#xff1a;https://zh-v2.d2l.ai/ 1、LeN…

IDEA中 application.yaml文件没有绿色的叶子

IDEA中 application.yaml文件没有绿色的叶子 问题背景 前段时间一直在刷算法题和备战考试&#xff0c;忽略了项目方面的锻炼&#xff0c;于是今天就想着来写一个练手的项目&#xff0c;重新熟悉一下技术栈。结果刚搭建一个SpringBoot项目&#xff0c;就发现application.yaml配…