zoukankan      html  css  js  c++  java
  • 329. 矩阵中的最长递增路径(Leetcode每日一题)

    题目链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/

    题解:

    一开始想的是枚举起点然后跑BFS,这样时间复杂度为o(n^2m^2),不太好。感觉官方题解的方法很秒,记忆化搜索,时间复杂度为O(nm),简单的介绍一下官方的思路,同样的,枚举每个起点,然后引入一个记忆化数组,如果这个点访问过了,直接返回该点对应的值,如果没有访问过,那么就访问该点的四个方向........代码还是比较好理解的。

    class Solution {
        int dp[1000+7][1000+7];
        int direction[4][2]={{1,0},{0,1},{0,-1},{-1,0}};
    public: 
        int longestIncreasingPath(vector<vector<int>>& matrix) {
            int n=matrix.size();
            if(n==0) return 0;
            int m=matrix[0].size();
            if(m==0) return 0;
            int ans=0; 
            for(int i=0;i<n;i++){
                for(int j=0;j<m;j++){
                    ans=max(ans,dfs(matrix,i,j,n,m));
                }
            }
            return ans;
        }
        int dfs(vector<vector<int >>&matrix,int x,int y,int n,int m){
            if(dp[x][y]) return dp[x][y];
            dp[x][y]=1;
            for(int i=0;i<4;i++){
                int dx=x+direction[i][0];
                int dy=y+direction[i][1];
                if(dx<0||dy<0||dx>=n||dy>=m||matrix[dx][dy]<=matrix[x][y]) continue ;
                dp[x][y]=max(dp[x][y],dfs(matrix,dx,dy,n,m)+1);
            }
            return dp[x][y];
        }
    };
  • 相关阅读:
    MVC异常过滤器
    文件分块传输
    UDP广播
    React 还是 Vue: 你应该选择哪一个Web前端框架?
    一个很好的XLSX的操作
    报表神器
    pycharm快敏捷键
    xlwt
    常用的列表和元祖
    HTML,css
  • 原文地址:https://www.cnblogs.com/Accepting/p/13514319.html
Copyright © 2011-2022 走看看