329. 矩阵中的最长递增路径
生活随笔
收集整理的這篇文章主要介紹了
329. 矩阵中的最长递增路径
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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. 矩阵中的最长递增路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qt 实现窗口拉伸
- 下一篇: 这不是bug,而是语言特性