赞
踩
2020年9月28日 周一 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
DFS
是非常直观的方法。从一个单元格进行DFS
,即可找到从该单元格开始的最长递增路径。对每个单元格分别进行DFS
之后,即可得到矩阵中的最长递增路径的长度。
但是这样做时间复杂度过高,原因是存在大量的重复计算。由于同一个单元格对应的最长递增路径的长度是固定不变的,因此可以使用记忆化的方法进行优化。 用矩阵 memo
作为缓存矩阵,将已经计算过的结果存储到缓存矩阵中,第二次遍历到就能直接使用,这也是DP的思想。
class Solution { public: static constexpr int dir[4][2]={ { -1,0},{ 1,0},{ 0,-1},{ 0,1}}; int longestIncreasingPath(vector<vector<int>>& matrix) { if(matrix.size()==0 || matrix[0].size()==0) return 0; int m = matrix.size(); int n = matrix[0].size(); // memo存放从坐标P(i,j)出发的最长递增路径,将已经计算过的结果保存下来,避免重复计算 vector<vector<int>> memo(m,vector<int>(n,0)); int maxLen = 0; for(int i=0;i<m;++i){ for(int j=0;j<n
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。