329 矩陣中的最長遞增路徑

2021-10-08 12:58:05 字數 1525 閱讀 9137

給定乙個整數矩陣,找出最長遞增路徑的長度。

對於每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方向上移動或移動到邊界外(即不允許環繞)。

通過乙個memo記錄深度優先搜尋的結果,如果在dfs過程中,memo不為0證明已經搜尋過,直接獲得結果。

class

solution

;static

constexpr

int dy[4]

=;int m, n;

intlongestincreasingpath

(vectorint>>

& matrix)

m = matrix.

size()

, n = matrix[0]

.size()

; vectorint>>

memo

(m, vector<

int>

(n,0))

;int ans =0;

for(

int i =

0; i < m; i++)}

return ans;

}int

dfs(vectorint>>

& matrix, vectorint>>

& memo,

int x,

int y)

memo[x]

[y]++

;for

(int i =

0; i <

4; i++)}

return memo[x]

[y];}}

;

和拓撲排序一樣,矩陣的乙個值均大於四周的值時,入度為0,矩陣的值均小於四周的值時,入度為4,讓入度為0的點進入佇列,利用對立進行廣度優先搜尋,再讓入度變為0的點再次進入佇列,直到搜尋完畢。

class

solution

;static

constexpr

int dy[4]

=;int m, n;

intlongestincreasingpath

(vectorint>>

& matrix)

m = matrix.

size()

, n = matrix[0]

.size()

; vectorint>>

memo

(m, vector<

int>

(n,0))

;for

(int i =

0; i < m; i++)}

}}queueint,

int>> q;

for(

int i =

0; i < m; i++))

;}}}

int ans =0;

while

(!q.

empty()

));}

}}}}

return ans;}}

;

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位元組跳動三面面試題。面試官提示我使用回溯...