每日OJ题_记忆化搜索⑤_力扣329. 矩阵中的最长递增路径

目录

力扣329. 矩阵中的最长递增路径

解析代码1_爆搜递归(超时)

解析代码2_记忆化搜索


力扣329. 矩阵中的最长递增路径

329. 矩阵中的最长递增路径

难度 困难

给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。

对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。

示例 1:

输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]
输出:4 
解释:最长递增路径为 [1, 2, 6, 9]。

示例 2:

输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]
输出:4 
解释:最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。

示例 3:

输入:matrix = [[1]]
输出:1

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 200
  • 0 <= matrix[i][j] <= 2^31 - 1
class Solution {
public:int longestIncreasingPath(vector<vector<int>>& matrix) {}
};

解析代码1_爆搜递归(超时)

  • 递归含义:给 dfs 一个下标 [i, j] ,返回从这个位置开始的最长递增路径的长度。
  • 函数体:上下左右四个方向看一看,哪里能过去就过去,统计四个方向上的最大长度。
  • 递归出口:因为是先判断再进⼊递归,因此没有出口。
class Solution {int dx[4] = {0, 0, -1, 1};int dy[4] = {1, -1, 0, 0};int m = 0, n = 0;
public:int longestIncreasingPath(vector<vector<int>>& matrix) {m = matrix.size(), n = matrix[0].size();int ret = 0;for(int i = 0; i < m; ++i){for(int j = 0; j < n; ++j){ret = max(ret, dfs(i, j, matrix));}}return ret + 1; // 加上自己}int dfs(int sr, int sc, vector<vector<int>>& matrix){int ret = 0;for(int i = 0; i < 4; ++i){int x = sr + dx[i], y = sc + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[sr][sc]){ret = max(ret, dfs(x, y, matrix) + 1);}}return ret;}
};


解析代码2_记忆化搜索

记忆化搜索解法:

  • 加上一个备忘录。
  • 每次进入递归的时候,去备忘录里面看看。
  • 每次返回的时候,将结果加入到备忘录里面。
class Solution {int dx[4] = {0, 0, -1, 1};int dy[4] = {1, -1, 0, 0};int m = 0, n = 0;int memo[201][201];
public:int longestIncreasingPath(vector<vector<int>>& matrix) {m = matrix.size(), n = matrix[0].size();int ret = 0;for(int i = 0; i < m; ++i){for(int j = 0; j < n; ++j){ret = max(ret, dfs(i, j, matrix));}}return ret + 1; // 加上自己}int dfs(int sr, int sc, vector<vector<int>>& matrix){if(memo[sr][sc] != 0)return memo[sr][sc];int ret = 0;for(int i = 0; i < 4; ++i){int x = sr + dx[i], y = sc + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] > matrix[sr][sc]){ret = max(ret, dfs(x, y, matrix) + 1);}}memo[sr][sc] = ret;return ret;}
};

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

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

相关文章

Linux下多线程相关概念

thread 1.什么是线程1.1 线程优缺点1.2 线程异常1.3 线程用途 2. 进程和线程区别3. 线程控制3.1 POSIX线程库3.2 pthread_create()3.3 线程ID3.4 线程ID地址空间布局pthread_self() 3.5 线程终止pthread_exit函数pthread_cancle函数 3.6 线程等待3.7 分离线程__thread修饰全局变…

Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“

目录: 一、"消息服务" 概述 :1.1 为什么要使用 "消息服务" ( 消息中间件 ) &#xff1f;① 异步处理② 应用解耦③ 流量削峰④ 分布式事务管理 1.2 常用 "消息中间件" 介绍 :ActiveMQ ( 广泛应用于中小型企业 )RabbitMQ ( 没有特别要求的场景下…

如何利用SSL证书让IP实现HTTPS安全访问

在互联网日益发展的今天&#xff0c;数据安全与隐私保护成为了用户和企业共同关注的焦点。HTTPS&#xff08;超文本传输安全协议&#xff09;作为一种广泛采用的安全通信协议&#xff0c;通过加密数据传输&#xff0c;为网站访问提供了安全保障。然而&#xff0c;要实现HTTPS访…

uniapp百度地图聚合

// loadBMap.js ak 百度key export default function loadBMap(ak) {return new Promise((resolve, reject) > {//聚合API依赖基础库,因此先加载基础库再加载聚合APIasyncLoadBaiduJs(ak).then(() > {// 调用加载第三方组件js公共方法加载其他资源库// 加载聚合API// Ma…

Oracle数据库如何插入平方(²)立方(³)字符

第一步&#xff1a;创建数据表&#xff0c;字段一定要是NVARCHAR2类型的 第二步&#xff0c;插入数据用 unistr(1\00b3) 形式的写法 00b3 代表m&#xff0c;00b2代表㎡ SELECT * FROM TESTABC; UPDATE TESTABC set NAME1unistr(1\00b3); UPDATE TESTABC set NAME2unistr(2\00b2…

【LLM多模态】MiniGPT4模型结构和训练流程

note 图生文应用场景&#xff1a;比如电商领域根据产品图像生成产品描述、娱乐领域中根据电影海报生成电影介绍等MiniGPT-4将预训练的大语言模型和视觉编码器参数同时冻结&#xff0c;只需要单独训练线性投影层&#xff0c;使视觉特征和语言模型对齐。MiniGPT4的视觉编码器&am…

centos 8.5 Node v20.12.2 npm 安装及环境配置 配置淘宝最新镜像地址

1下载&#xff1a;Node.js — Download Node.js 2文件上传到服务器 rootlocalhost software]# tar xvf node-v20.12.2-linux-x64.tar.xz [rootlocalhost software]# mv node-v20.12.2-linux-x64/ /usr/local/node [rootlocalhost software]# vim /etc/profile export PA…

VSCode:设置搜索时的排除目录

VSCode搜索时默认会搜索目录下所有文件 $ tree . ├── a.c ├── m.c └── x └── b.c //a.c #include <stdio.h> #include <string.h>int main() {char s[] "hello\n";fprintf(stdout, s, strlen(s));return 0; } //m.c #include <stdio…

【LSTM】LSTM网络及参数学习笔记

图1 LSTM模型结构可视化 [6]. 图2 LSTM cell结构说明 图3 LSTM cell和num_units说明 [4]. 图4 LSTM的网络结构 1. LSTM 是对一个LSTM层的抽象&#xff0c;可以看成是由多个LSTM cell组成&#xff0c;是包含时间步的一个网络 2. LSTM cell 图2是LSTM在时间步上的结构&#xf…

【硬件开发】原型设计对于成功产品开发重要性及常见阶段

电子产品的设计与开发始于原型制作阶段。这些原型虽可能与最终产品极为相似&#xff0c;但总带有实验性质&#xff0c;因为电子原型的制作过程包括对新概念、新思想及新解决方案的测试。虽然存在出错的风险&#xff0c;跳过这一阶段可能会导致不必要的开支。不擅长电子硬件设计…

2024年想要开一家抖音小店,需要多少钱?一篇详解!

大家好&#xff0c;我是电商糖果 随着抖音卖货的持续火爆&#xff0c;抖音小店也成了电商行业讨论度最大的项目之一。 不少朋友都想知道&#xff0c;如果今年开抖音小店大概需要多少钱。 糖果做小店的时间也比较长&#xff0c;也经营了多家小店。 对于开一家抖音小店需要多…

多规格产品应该如何设置呢?

今天一用户从供应商手中拿到产品价目表&#xff0c;但是设置起来蒙圈了&#xff0c;接下来我们就一起设置一下吧&#xff5e; 一、产品价格表 我们通过供应商手中拿到产品价目表是这个样子的&#xff1a; 我们可以看到此产品的销售客价根据不同地区导致的价格不同&#xff0…

ABAP小技巧汇总(自用)

1.TIMESTAMP搜索帮助 PARAMETERS:p_begin TYPE ty_screen-date_begiu MATCHCODE OBJECT cpe_timestamp, "开始时间戳p_end TYPE ty_screen-date_end MATCHCODE OBJECT cpe_timestamp. "结束时间戳 效果&#xff1a;

Git笔记-常用指令

Git笔记-常用指令 一、概述二、仓库管理二、缓存区操作1. 添加文件到缓存区2. 取消缓存文件3. 忽略列表 三、日志状态信息四、分支操作五、六、 一、概述 这里记录一些git常用的指令。 二、仓库管理 # 本地仓库初始化 git init# 克隆仓库 git clone git_url # git clone ht…

win11个性化锁屏界面怎么关闭?

win11个性化锁屏界面关闭方法对于win11用户来说&#xff0c;关闭个性化锁屏界面是一个常见问题。本文将由php小编苹果详细介绍如何执行此操作&#xff0c;分步指导并提供操作截图。继续阅读以了解具体步骤。 win11个性化锁屏界面关闭方法 第一步&#xff0c;点击底部Windows图…

python数据分析常用基础语法

Python语言基础——语法基础 前言一、变量的介绍与使用变量的介绍变量命名规则变量的使用拓展 二、标识符标识符命名命名规则注意事项 三、数据类型数据类型的介绍数据类型的查看示例 四、输入与输出输入和输出的介绍format格式化输出占位符 五、代码缩进与注释代码缩进 前言 …

【论文速读】| LLM4FUZZ:利用大语言模型指导智能合约的模糊测试

本次分享论文&#xff1a;LLM4FUZZ: Guided Fuzzing of Smart Contracts with Large Language Models 基本信息 原文作者&#xff1a;Chaofan Shou, Jing Liu, Doudou Lu, Koushik Sen 作者单位&#xff1a;加州大学伯克利分校&#xff0c;加州大学欧文分校&#xff0c;Fuzz…

计算机网络-DHCPv6配置

DHCPv6实验配置 一、DHCPv6有状态配置 拓扑图&#xff1a; 请求报文 回复报文中的信息 配置&#xff1a; # 全局启用ipv6 ipv6 # 启用DHCP dhcp enable# 创建dhcpv6的地址池 dhcpv6 pool pool1address prefix 2001::/64excluded-address 2001::10dns-server 2001:4860:4860::8…

【新版系统架构】知识点背诵默写本

前言 系统架构考试在即&#xff0c;想要考试的人肯定感受到了沉甸甸的压力和紧迫感&#xff0c;脑海中不断闪过知识点的画面&#xff0c;却让人有些头昏脑胀&#xff0c;发现很难完全记住&#xff0c;这个考试很难&#xff0c;知识点很多。这次我在准备考试的同时&#xff0c;…

基于Java+SpringBoot+Vue前后端分离教学资源共享平台系统

基于JavaSpringBootVue前后端分离教学资源共享平台系统 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…