当前位置: 首页 > news >正文

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

一、问题描述

二、解题思路

解法一:深度优先搜索

(1)整体思路

可以采用深度优先搜索+剪枝来解决这个问题。遍历matrix数组,对每一个位置进行深度优先搜索,找到以该位置为起点的递增路径的最大长度,遍历完matrix数组后,最长的递增路径的长度即为所求。

(2)函数功能:

dfs函数用于返回以(i,j)为起点的递增路径的最大长度。

(3)dfs函数体

1>变量longth用于记录递增路径的长度,初始化为1;

2>按照上、右、下、左的顺序从(i,j)位置进行探索,如果matrix[i][j]<matrix[x][y]且x和y不越界,就就将path更新为max(path,dfs(matrix,x,y)+1);

3>最后返回path即可;

解法二:记忆化搜索

由于解法一存在大量的重复计算,所以我们可以定义一个数组memo来记录已经计算过的量,memo[i][j]即为dfs(matrix,i,j)的值:

(1)如果memo[i][j]!=0,就表示这个值已经计算过了,直接返回memo[i][j];

(2)如果没有被计算,就进入下面的循环,再在返回path之前更新memo[i][j];

三、代码实现

解法一:深度优先搜索(超时)

class Solution {int m,n;
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(matrix,i,j));return ret;}int dx[4]={0,1,0,-1};int dy[4]={1,0,-1,0};int dfs(vector<vector<int>>& matrix,int i,int j){int longth=1;for(int k=0;k!=4;k++){int x=i+dx[k];int y=j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&matrix[i][j]<matrix[x][y])longth=max(longth,dfs(matrix,x,y)+1);}return longth;}
};

解法二:记忆化搜索(优化)

class Solution {int m,n;vector<vector<int>> memo;
public:int longestIncreasingPath(vector<vector<int>>& matrix) {//初始化全局变量m=matrix.size();n=matrix[0].size();memo.resize(m,vector<int>(n,0));int ret=0;for(int i=0;i!=m;i++)for(int j=0;j!=n;j++)ret=max(ret,dfs(matrix,i,j));return ret;}int dx[4]={0,1,0,-1};int dy[4]={1,0,-1,0};int dfs(vector<vector<int>>& matrix,int i,int j){int longth=1;if(memo[i][j]!=0) return memo[i][j];for(int k=0;k!=4;k++){int x=i+dx[k];int y=j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&matrix[i][j]<matrix[x][y])longth=max(longth,dfs(matrix,x,y)+1);}memo[i][j]=longth;return longth;}
};

http://www.dtcms.com/a/486229.html

相关文章:

  • 生成模型实战 | 实时任意风格迁移
  • C++ --- 模版初阶
  • 外贸家具网站.net网站开发简介
  • Django 的文档接口
  • blender中对合并的物体重复设置材质,删除重复材质,批量复制材质
  • IDEA界面突然出现一条“竖线”,附解决办法
  • Git 学习及使用
  • 使用OpenGL加速图像处理
  • CUDA 调试器 sanitizer,检测数据竞争,竞争条件 race condition
  • Blender布料物理模拟生成插件 Simply Cloth Studio V1.4.4 + Simply Cloth Pro v3.0附使用教程
  • AWS CloudWatch:服务器的“眼睛”,实时监控一切动向
  • 云南省建设厅合同网站嵊州门户网站
  • 做网站需要学jsp我也来做外国网站购物
  • 异步数据采集实践:用 Python/Node.js 构建高并发淘宝商品 API 调用引擎
  • Spring Boot 3零基础教程,yml文件中配置和类的属性绑定,笔记15
  • Lua C API 中一段LUA建表过程解释
  • 用于大语言模型后训练阶段的新方法GVPO(Group Variance Policy Optimization)
  • k8s集群环境下Jenkins环境性能测试项目实战
  • 【k8s】在 k8s上部署一个 web 服务
  • 怎做网站网页设计属于什么行业
  • 02 Oracle JDK 下载及配置(解压缩版)
  • 「10.11」闪崩前比特币做空风波
  • 目标检测学习总结
  • java求职学习day40
  • 服装公司网站首页做头像的网站空白
  • 在 Microsoft Azure 上部署 ClickHouse 数据仓库:托管服务与自行部署的全面指南
  • 橙色可以做哪些网站沈阳网站建设024w
  • 网络设备配置:交换机、路由器OSPF和BGP、防火墙策略管理
  • 深圳建设工程信息网站科技有限公司网页设计
  • h5网站开发培训哪里好项目网创业