329 矩阵中的最长递增路径
题目描述:
给定一个整数矩阵,找出最长递增路径的长度。
对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
示例 1:
输入: nums =
[
[9,9,4],
[6,6,8],
[2,1,1]
]
输出: 4
解释: 最长递增路径为 [1, 2, 6, 9]。
示例 2:
输入: nums =
[
[3,4,5],
[3,2,6],
[2,2,1]
]
输出: 4
解释: 最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。
方法1:使用带记忆路径的深度搜索
主要思路:
(1)从原数组中的每个点出发,所能达到的最长的路径值是固定的,为了避免在深度搜索过程中,对每个点的最长路径进行重复搜索,对搜索过的路径进行记录;
(2)定义和原数组同样大小的数组来记录每个点的最大路劲长度,初始值为0,若搜索到某个结点,其值不为零,说明已经搜索过了,可以直接返回结果,否则对当前结点的路径值自增一,然后逐个判断上,下,左,右四个方向上的路径值,并和当前值进行比较,获得最大路径长度值;
class Solution {public:int dfs(vector<vector<int>>& matrix,vector<vector<int>>& visited_pos,int row,int col){//若当前位置计算过最大路径值,既非零,则直接返回if(visited_pos[row][col])return visited_pos[row][col];++visited_pos[row][col];//路径值加1//通过当前位置的上边结点可能达到的最大路径值if(row>0&&matrix[row-1][col]>matrix[row][col])visited_pos[row][col]=max(visited_pos[row][col],dfs(matrix,visited_pos,row-1,col)+1);//通过当前位置的下边结点可能达到的最大路径值if(row<matrix.size()-1&&matrix[row+1][col]>matrix[row][col])visited_pos[row][col]=max(visited_pos[row][col],dfs(matrix,visited_pos,row+1,col)+1);//通过当前位置的左边结点可能达到的最大路径值if(col>0&&matrix[row][col-1]>matrix[row][col])visited_pos[row][col]=max(visited_pos[row][col],dfs(matrix,visited_pos,row,col-1)+1);//通过当前位置的右边结点可能达到的最大路径值if(col<matrix[0].size()-1&&matrix[row][col+1]>matrix[row][col])visited_pos[row][col]=max(visited_pos[row][col],dfs(matrix,visited_pos,row,col+1)+1);return visited_pos[row][col];}int longestIncreasingPath(vector<vector<int>>& matrix) {//排除特殊的情形if(matrix.empty()||matrix[0].empty()){return 0;}int max_len=0;//存储最大路径值//存储各个位置处的最大路径值vector<vector<int>> visited_pos(matrix.size(),vector<int>(matrix[0].size(),0));//对原数组的每个位置求取其最大路径值for(int i=0;i<matrix.size();++i){for(int j=0;j<matrix[0].size();++j){max_len=max(max_len,dfs(matrix,visited_pos,i,j));//更新可能的最大路径值}}return max_len;}
};
329 矩阵中的最长递增路径相关推荐
- 329. 矩阵中的最长递增路径
2020-06-09 1.题目描述 矩阵中的最长递增路径 2.题解 在这里我们可以将其视作有向图,如果当前的数比其四周位置上的数要小的话,就构建一条从当前数指向其 周围的边,要求得最长的递增路径,那么 ...
- LeetCode 329. 矩阵中的最长递增路径(记忆化递归)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...
- 329. Longest Increasing Path in a Matrix 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [[9,9 ...
- 矩阵中的最长递增路径
矩阵中的最长递增路径 文章目录 矩阵中的最长递增路径 一.问题描述 **方法一:朴素的深度优先搜索 [超时]** **方法二:记忆化深度优先搜索 [通过]** **方法三:动态规划** **方法四:广 ...
- java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径
[leetcode-动态规划]矩阵中的最长递增路径 题目: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即 ...
- Leetcode--329. 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [ ...
- 算法-------矩阵中的最长递增路径(Java版本)
题目 给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9 ...
- leetcode329. 矩阵中的最长递增路径(dfs)
给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9,4] ...
- leetcode329. 矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [ ...
最新文章
- JAVA 多线程实现包子铺(买包子,吃包子)
- python模块学习---cmd
- Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失(续)
- sed 删除windows下的CR/LF
- linux memcached 运行,linux下查看Memcached运行状态
- java android上传文件_Java-Android-如何将txt文件上传到网站?
- mongodb数组操作符
- C++新特性探究(18.1):C++11 shared_ptr智能指针
- 【很好的分享】zookeeper系列
- HG255d 刷最新openwrt Pandorabox并安装njit拨号
- MATLAB信号处理仿真入门实验
- STM32开源代码——TM1637四位数码管
- android删除sdcard文件系统,Android 5.0+删除Sdcard文件
- Python代码写好了怎么运行?
- 优化问题-Lagrange函数和共轭函数
- 机器学习面试问题汇总
- BootLoader这个玩意
- [ACM]【map/分治】厦大月赛 环鸽的CHONG
- 统计学中的均值、方差、协方差
- 2014-百度 阿里 华为笔试题
热门文章
- 非法破坏计算机系统罪宣判,以非法经营罪提起公诉。法庭未当庭宣判。为什么不会被定破坏计算机信息系统罪呢?...
- matlab程序 直线插补,无聊写matlab仿真直线插补算法
- android 控制POS机图文打印(一)
- 期货开户客户经理一对一专业服务指导
- Z怎样写系统测试报告(A)
- 计应121--实训一【李智飞(27号)--李阳持(26号)--胡俊琛(13号)--曹吉(2号)】
- 联想拯救者R7000P2021安装Ubuntu双系统
- 第二模块-作业:员工查询程序
- 【绝对详细!不好使你顺着网线敲我!】Django3.1在Ubuntu16.04上的部署
- MinIO集群怎么接入Prometheus监控?(上)