在乙個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...