LeetCode 搜尋二維矩陣

2021-09-10 22:35:28 字數 1468 閱讀 5099

編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性:

每行中的整數從左到右按公升序排列。

每行的第乙個整數大於前一行的最後乙個整數。

示例 1:

輸入:

matrix = [

[1, 3, 5, 7],

[10, 11, 16, 20],

[23, 30, 34, 50]

]target = 3

輸出: true

示例 2:

輸入:

matrix = [

[1, 3, 5, 7],

[10, 11, 16, 20],

[23, 30, 34, 50]

]target = 13

輸出: false

思路分析:說白了此道題就是要在這個具有特性的矩陣中搜尋乙個target,最笨的方法當然是一遍遍歷矩陣。但是這種方法沒有充分利用矩陣的特性。

①首先每一行遞增的特性說明,如果target大於某一行的尾端,那麼target必定不再此行中(因為行的尾端為此行的最大值)。

每行的第乙個整數大於前一行的最後乙個整數由於每一行遞增,那麼行首為此行的最小值,又因為每一行的行首大於上一行的行尾(上一行的最大值),說明每一行的每乙個元素都大於上一行的每乙個元素。那麼如果target大於a行的行尾,那麼target必定不會a行之前的行中。

③如果target大於a - 1行的行尾,小於等於a行的行尾,那麼target有且只有可能出現在a行,因為a+1的所以元素都大於a行的所有元素。

④那麼我們就可以從右上角開始尋找,首先確定target可能存在的行,然後使用二分法進行搜尋此行即可。

class

solution

int colsize = matrix[0]

.size()

;if(colsize ==0)

int row =

0, col = colsize -1;

//從右上角開始進行搜尋可能存在的行

while

(row < rowsize && matrix[row]

[col]

< target)

if(row == rowsize)

//接著在row行進行二分法搜尋

int begin =

0, end = colsize -1;

while

(begin <= end)

else

if(matrix[row]

[mid]

< target)

else

}return

false;}

};

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...

搜尋二維矩陣

寫出乙個高效的演算法來搜尋 m n矩陣中的值。這個矩陣具有以下特性 每行中的整數從左到右是排序的。每行的第乙個數大於上一行的最後乙個整數。樣例 考慮下列矩陣 1,3,5,7 10,11,16,20 23,30,34,50 給出 target 3,返回 true 思路一 最容易想到的一種解法就是兩層f...