編寫乙個高效的演算法來判斷 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...