74 搜尋二維矩陣

2021-10-18 21:12:03 字數 1680 閱讀 1513

題目描述

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