2020-06-09

1.题目描述

矩阵中的最长递增路径

2.题解

在这里我们可以将其视作有向图,如果当前的数比其四周位置上的数要小的话,就构建一条从当前数指向其
周围的边,要求得最长的递增路径,那么其一定是从入度为0的点开始的,我们可以按照拓扑排序的逻辑,当
当前点的入度为0时,则入队列,同时将与其相邻并且值比它大的数的入度减1,到同一点的路径不只一条,
我们取其最大值。

3.代码

class Solution {public:int longestIncreasingPath(vector<vector<int>>& matrix) {int len1=matrix.size();if (!len1) return 0;int len2=matrix[0].size();if (!len2) return 0;vector<vector<int>> degree(len1,vector<int>(len2));vector<vector<int>> value(len1,vector<int>(len2));int x[4][2]={1,0,-1,0,0,-1,0,1};// 进行初始化for (int i=0;i<len1;i++){for (int j=0;j<len2;j++){for (int k=0;k<4;k++){int xx=i+x[k][0];int yy=j+x[k][1];if (xx<0||xx>=len1||yy<0||yy>=len2) continue;if (matrix[xx][yy]<matrix[i][j]) degree[i][j]++;}}}queue<pair<int,int>> myque;for (int i=0;i<len1;i++){for (int j=0;j<len2;j++){if (!degree[i][j]){pair<int,int> tmp(i,j);myque.push(tmp);value[i][j]=1;}}}int res=1;while (!myque.empty()){pair<int,int> tmp=myque.front();myque.pop();for (int k=0;k<4;k++){int xx=tmp.first+x[k][0];int yy=tmp.second+x[k][1];if (xx<0||xx>=len1||yy<0||yy>=len2||value[xx][yy]>=value[tmp.first][tmp.second]+1) continue;if (matrix[xx][yy]>matrix[tmp.first][tmp.second]){degree[xx][yy]--;if (!degree[xx][yy]){pair<int,int> t(xx,yy);myque.push(t);value[xx][yy]=value[tmp.first][tmp.second]+1;res=max(res,value[xx][yy]);}}}}return res;}
};

329. 矩阵中的最长递增路径相关推荐

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

    题目描述: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = ...

  2. LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...

  3. 329. Longest Increasing Path in a Matrix 矩阵中的最长递增路径

    给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [[9,9 ...

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

    矩阵中的最长递增路径 文章目录 矩阵中的最长递增路径 一.问题描述 **方法一:朴素的深度优先搜索 [超时]** **方法二:记忆化深度优先搜索 [通过]** **方法三:动态规划** **方法四:广 ...

  5. java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径

    [leetcode-动态规划]矩阵中的最长递增路径 题目: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即 ...

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

    给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums =  [   ...

  7. 算法-------矩阵中的最长递增路径(Java版本)

    题目 给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9 ...

  8. leetcode329. 矩阵中的最长递增路径(dfs)

    给定一个整数矩阵,找出最长递增路径的长度.对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕).示例 1:输入: nums = [[9,9,4] ...

  9. leetcode329. 矩阵中的最长递增路径

    给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums =  [   ...

最新文章

  1. SNOI 2019 退役记
  2. linux 下用ecipse 作用oracle 的客户端
  3. vc设备工程师_4注册公用设备工程师专业基础考试真题.
  4. matlab常用工具箱的调用指令
  5. Ubuntu Linux将支持所有树莓派设备
  6. 二、织物具备超级防水效果的条件?
  7. 论文学习16-Going out on a limb: without Dependency Trees(联合实体关系抽取2017)
  8. 剥开比原看代码15:比原是如何转帐的
  9. QtCreator与catkin命令两种方式开发ROS程序(图示加代码)
  10. 查看Linux下端口占用情况的命令
  11. BZOJ 2456: mode
  12. VB.NET/C# Free Grid Control 免费开源表格控件 - ReoGrid 介绍(1)
  13. 二项分布的期望与方差的证明
  14. 0xc0000225无法进系统_win10系统出现0xc0000225无法进入系统的恢复方法
  15. 别了,AlphaGo之魂——黄士杰
  16. JUC源码分析16-集合-ConcurrentSkipListMap、ConcurrentSkipListSet
  17. Debian - Add the checking mail notification - mutt
  18. 京东物流一体化供应链建设实践
  19. 19071 递归实现指数型枚举
  20. 基因注释-InterProScan

热门文章

  1. 那个一年发4篇cell的研究生后来怎样了?
  2. Cell封面文章:跑步短短10分钟,身体近10000个分子大变样!蛋白组学破解运动有益健康之谜...
  3. 一分钟学会在Mac中如何将文件批量重命名
  4. android代码删除sd卡文件在哪里,android - 如何从SD卡中删除文件?
  5. 《信息学奥赛一本通提高篇》第6章 组合数学
  6. P1115 最大子段和(python3实现)
  7. mac mysql本地连接数_Mac OS X下MySQL 5.0的默认连接数
  8. python线程安全的计数器_+ =运算符在Python中是线程安全的吗?
  9. Linux基础学习五:软件的相关安装(JDK,Tomcat,Yum)
  10. 大三软件工程小项目-小技术集合-tcp服务器搭建及客户端