給定乙個整數矩陣,找出最長遞增路徑的長度。
對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。
示例 1:
輸入: nums =
[ [9,9,4],
[6,6,8],
[2,1,1]
] 輸出: 4
解釋: 最長遞增路徑為 [1, 2, 6, 9]。
示例 2:
輸入: nums =
[ [3,4,5],
[3,2,6],
[2,2,1]
] 輸出: 4
解釋: 最長遞增路徑是 [3, 4, 5, 6]。注意不允許在對角線方向上移動。
思路:記憶化搜尋,也可以用拓撲排序來做,這裡用的時bfs,用dfs會更快
public
intlongestincreasingpath
(int
matrix)
int m = matrix[0]
.length;
//方向陣列
int[
] dir =
newint
,,,}
;//存放每次搜尋後以當前位置為起點的最長路徑長度
int[
] val =
newint
[n][m]
;for
(int i =
0; i < val.length; i++)}
//這裡用了優先佇列,其實用不用差別不大
queue<
int[
]> q =
newpriorityqueue
<
>
((m1, m2)
-> m2[2]
- m1[2]
);for(
int i =
0; i < n; i++))
;}} max =1;
while
(!q.
isempty()
)); max = math.
max(max, val[sx]
[sy]);
}}}return max;
}
329 矩陣中的最長遞增路徑
給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 示例 1 輸入 nums 9,9,4 6,6,8 2,1,1 輸出 4 解釋 最長遞增路徑為 1,2,6,9 示例 2 輸入 nums 3,4,5 3,...
329 矩陣中的最長遞增路徑
給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 示例 1 輸入 nums 9,9,4 6,6,8 2,1,1 輸出 4 解釋 最長遞增路徑為 1,2,6,9 dfs 記憶矩陣 儲存以該點位起點的最長路...
329 矩陣中的最長遞增路徑
題目 型別 深搜 記憶化遞迴 難度 困難 題意 從乙個二維矩陣中找到乙個嚴格遞增的路徑。使用深度搜尋,不需要標記,因為到當前點是需要滿足比原來點數值大的,所以也不會重複遍歷。然後使用記憶化遞迴記錄最長的路徑,如果已經計算過了直接返回。備註 2020.4.18位元組跳動三面面試題。面試官提示我使用回溯...