329 矩陣中的最長遞增路徑

2021-08-28 10:28:48 字數 1405 閱讀 8332

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

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

示例 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]。注意不允許在對角線方向上移動。

假設我們知道遞增序列的起點,那麼我們只要用dfs或者bfs就可以把最長的遞增路徑找出來。

但是我們不知道起點,那麼我們也可以將矩陣轉換成乙個圖來做,相鄰的兩個點,數值小的點可以有路到數值大的點。那麼這就直接變成了要求這個圖的直徑長度的問題了,那也比較簡單,進行兩次dfs即可。

但是將乙個矩陣轉換成圖感覺還是挺麻煩的,那樣我們可以參考最先的想法,對每個點都進行bfs不就可以了嗎,當然了,為了優化,如果這個點在之前的bfs中已經訪問過了,那麼這個點就不用bfs了,這樣就可以省一點時間。

class solution };

intlongestincreasingpath

(vectorint>>

& matrix)

vectorint>

>

dp(matrix.

size()

, vector<

int>

(matrix[0]

.size()

,1))

; stack posarr;

int result =0;

for(

int loop =

0; loop < matrix.

size()

; loop++);

int aimcol[4]

=;posarr.

pop();

for(

int pos =

0; pos <

4; pos++)}

}}}}

}for

(int loop =

0; loop < dp.

size()

; loop++)}

return result;

} bool isbigger

(int nowrow ,

int nowcol ,

int aimrow ,

int aimcol , vectorint>>

& matrix)

else}}

;

329 矩陣中的最長遞增路徑

給定乙個整數矩陣,找出最長遞增路徑的長度。對於每個單元格,你可以往上,下,左,右四個方向移動。你不能在對角線方向上移動或移動到邊界外 即不允許環繞 示例 1 輸入 nums 9,9,4 6,6,8 2,1,1 輸出 4 解釋 最長遞增路徑為 1,2,6,9 dfs 記憶矩陣 儲存以該點位起點的最長路...

329 矩陣中的最長遞增路徑

題目 型別 深搜 記憶化遞迴 難度 困難 題意 從乙個二維矩陣中找到乙個嚴格遞增的路徑。使用深度搜尋,不需要標記,因為到當前點是需要滿足比原來點數值大的,所以也不會重複遍歷。然後使用記憶化遞迴記錄最長的路徑,如果已經計算過了直接返回。備註 2020.4.18位元組跳動三面面試題。面試官提示我使用回溯...

329 矩陣中的最長遞增路徑

2020 06 09 1.題目描述 矩陣中的最長遞增路徑2.題解 在這裡我們可以將其視作有向圖,如果當前的數比其四周位置上的數要小的話,就構建一條從當前數指向其 周圍的邊,要求得最長的遞增路徑,那麼其一定是從入度為0的點開始的,我們可以按照拓撲排序的邏輯,當 當前點的入度為0時,則入佇列,同時將與其...