題目描述
編寫乙個高效的演算法來判斷m x n
矩陣中,是否存在乙個目標值。該矩陣具有如下特性:
示例1:
輸入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
輸出:true
示例 2:
輸入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
輸出:false
題解:
法一:因為矩陣保證每行遞增,且前一行的最後乙個元素小於當前行的第乙個元素,於是可以根據最後一列快速確定target
在哪一行,然後在行中查詢。
時間複雜度:o(n
+m)o(n + m)
o(n+m)
額外空間複雜度:o(1
)o(1)
o(1)
class
solution
return
false;}
};/*記憶體:9.4mb,擊敗:80.35%
*/
法二:
因為行和列都是有序的,所以可以使用兩次二分,第一次確定target
在哪一行,第二次確定在那一列。
時間複雜度:o(l
ogn+
logm
)o(logn + logm)
o(logn
+log
m)額外空間複雜度:o(1
)o(1)
o(1)
class
solution
int row = r;
if( target < matrix[r][0
])return
false
; l =
0, r = m -1;
while
( l < r )
return matrix[row]
[r]== target;}}
;/*記憶體:9.3mb,擊敗:84.15%
*/
法三:
也可以將整個矩陣展開成一維陣列,在一維陣列上一次二分即可。
時間複雜度:o(l
og(n
∗m))
o(log(n*m))
o(log(
n∗m)
) 額外空間複雜度:o(1
)o(1)
o(1)
class
solution
return matrix[r / m]
[r % m]
== target;}}
;/*記憶體:9.3mb,擊敗:82.28%
*/
與方法二時間複雜度一樣,不過**更簡潔。 74 搜尋二維矩陣
題目 編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性 每行中的整數從左到右按公升序排列。每行的第乙個整數大於前一行的最後乙個整數。示例 1 輸入 matrix 1,3,5,7 10,11,16,20 23,30,34,50 target 3 輸出 true 示...
74 搜尋二維矩陣
74.搜尋二維矩陣 author wsq date 2020 10 06 編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性 每行中的整數從左到右按公升序排列。每行的第乙個整數大於前一行的最後乙個整數。示例 1 輸入 matrix 1,3,5,7 10,11,16...
74 搜尋二維矩陣
編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性 每行中的整數從左到右按公升序排列。每行的第乙個整數大於前一行的最後乙個整數。class solution else if array mid target return left bool searchmatri...