Leetcode 矩陣搜尋

2021-10-05 19:02:15 字數 1339 閱讀 3019

在乙個n*m的矩陣裡,每一行都是排好序的,每一列也都是排好序的,請設計乙個演算法在矩陣中查詢乙個數。

題目的條件是每行每列都是公升序的,那麼可以利用這一點。

那麼有沒有辦法可以讓程式自己去尋找乙個路徑?也就是說對於路徑走到任何乙個數,如果給定條件的話,只有乙個方向走

矩陣中,位置有2,3,4三種可能的方向個數,比如四個角的地方有2個方向可以走,除去外圈的所有數有4個方向可以走

那如果每到乙個數就根據該數和target的大小去判斷下一步的方向,怎麼才能確認下一步的方向只有乙個呢?

比如矩陣

[1, 4, 8, 10,15],

[3, 5, 6, 7, 20],

[9, 20,22,24,29],

[11,22,23,29,39]

如果從1出發,那就算知道了target比1大,也不知道向左走還是向右走

同理,3,9,4,8,10等這些數也無法具體下一步走向

如果從39出發,那所有數都比target大

最後發現,只有11和15這兩個位置可以保證在知道target的情況下,下一步該往**走

def

search_in_matrix

(matrix, target)

:#這裡使用從左下角出發的方法開始搜尋

iflen

(matrix)==0

:return-1

row, col =

len(matrix)-1

,0#只能往上和右走

while row >=

0and col <=

len(matrix[0]

):print

(row, col)

cur = matrix[row]

[col]

if cur == target:

return

(row, col)

#當target大於當前節點的時候,只能往上走

elif target < cur:

row = row -

1#當target小於當前節點的時候,只能往右走

elif target > cur:

col = col +

1return-1

matrix =[[

1,4,

8,10,

15],[

3,5,

6,7,

20],[

9,20,

22,24,

29],[

11,22,

23,29,

39]]target =

5search_in_matrix(matrix, target)

LeetCode 搜尋二維矩陣

編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性 每行中的整數從左到右按公升序排列。每行的第乙個整數大於前一行的最後乙個整數。示例 1 輸入 matrix 1,3,5,7 10,11,16,20 23,30,34,50 target 3 輸出 true示例 2 ...

LeetCode 搜尋二維矩陣II

編寫乙個高效的演算法來搜尋 m x n 矩陣 matrix 中的乙個目標值 target。該矩陣具有以下特性 每行的元素從左到右公升序排列。每列的元素從上到下公升序排列。示例 現有矩陣 matrix 如下 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,13,14,17...

Leetcode初學 搜尋二維矩陣

我們已知該二維陣列的每一行都是有序的,所以我們可以從這裡下手 我們可以根據每一行的最後乙個數判斷target應該會出現在哪一行 我們從上到下進行搜尋 確定target會在行數 再在該行中進行遍歷搜尋 class solution public boolean searchmatrix int mat...