給定乙個整數矩陣,找出最長遞增路徑的長度。
對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。
示例 1:
輸入: nums =示例 2:[[9,9,4],
[6,6,8],
[2,1,1]
] 輸出: 4
解釋: 最長遞增路徑為 [1, 2, 6, 9]。
輸入: nums =解一,記憶化搜尋[[3,4,5],
[3,2,6],
[2,2,1]
] 輸出: 4
解釋: 最長遞增路徑是 [3, 4, 5, 6]。注意不允許在對角線方向上移動。
class solution
}return ans;
}public int find(int x,int y,int map)else;
int dy=new int;
int max=0;
for(int i=0;i=0&&xx=0&&yymap[x][y])
}return dis[x][y]=max+1;}}
}
思路簡單直接,dfs+記憶陣列就行了
解二,拓撲排序
class solution , , , };
public int rows, columns;
public int longestincreasingpath(int matrix)
rows = matrix.length;
columns = matrix[0].length;
int outdegrees = new int[rows][columns];
for (int i = 0; i < rows; ++i) }}
}queuequeue = new linkedlist();
for (int i = 0; i < rows; ++i) );}}
}int ans = 0;
while (!queue.isempty()) );}}
}}
}return ans;
}}
借助拓撲排序按層出隊,則遍歷的層數即是遞增序列的最長長度
解三,動態規劃
class solution
}public int longestincreasingpath(int g)
}nodes.sort((o1, o2) -> o1.val - o2.val);
int f = new int[n][m];
for (int i = 0; i < n; i++) arrays.fill(f[i], 1);
int ans = 0;
int dirs = ;
for (node node : nodes)
}ans = math.max(ans, f[x][y]);
}return ans;
}}
首先對圖中的點集從大到小排序,那麼按照排序進行狀態轉移時,小的數在後面,狀態完全依賴於大的數,即可完成自底向上的動態規劃。 最長遞增路徑
乙個無向圖,可能有自環,有重邊,每條邊有乙個邊權。你可以從任何點出發,任何點結束,可以經過同乙個點任意次。但是不能經過同一條邊2次,並且你走過的路必須滿足所有邊的權值嚴格單調遞增,求最長能經過多少條邊。以此圖為例,最長的路徑是 3 1 2 3 2 或 3 1 2 3 4 長度為4。input 第1行...
最長遞增路徑(YYOJ)
description 給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外。input 測試樣例由多組測試資料組成。每組測試資料第一行輸入兩個正整數n,m代表矩形的行數和列數 1 n,m 500 接下來輸入n m 個數...
矩陣中的最長遞增路徑
矩陣中的最長遞增路徑 給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 題解 首先看到這道題,突然想到島嶼那題,每次向著四個方向不斷遞迴 只是條件是只遞迴比當前數大的數,所以使用深度搜尋,並且返回搜尋中...