LeetCode 74 搜尋二維矩陣

2021-10-23 16:50:59 字數 1760 閱讀 6312

74. 搜尋二維矩陣

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

方法1 基準值:

思路:

以右上角為基準值 basevul,

若 target < basevul:向左移動 j--

若 target > basevul:向下移動 i++

時間複雜度:o(m * n)

空間複雜度:o(1)

方法2 二分查詢:

思路:

該虛陣列的序號可以轉化為原矩陣中的行和列 (當然不會真的建立乙個新陣列) ,該有序陣列非常適合二分查詢。

若二維矩陣展開變為陣列(一維矩陣)後,陣列下標與二維矩陣對應行下標和列下標的對映關係如下:

行row    =    轉化為陣列時的元素下標/一行中元素個數 ,

列col     =    轉化為陣列時的元素下標%一行中元素個數。

(1)初始化左右邊界下標:

left = 0;                          // 第乙個元素下標

right = matrix.size() * matrix[0].size() - 1;  // 最後一行最後乙個元素:m * n - 1

(2)比較:

如果目標值等於中間數midvul,找到則直接返回true;

如果目標值在中間數midvul的左邊,則target可能位於right的左邊,故縮小right範圍:right = midvul -1;

如果目標值在中間數midvul的右邊,則target可能位於right的右邊,故縮小left範圍:   left = mid + 1.

時間複雜度:o(log(mn))

空間複雜度:o(1)

LeetCode74 搜尋二維矩陣

題目大意 要求在乙個二維矩陣中搜尋乙個數,要求是時間盡可能少。說明 二維矩陣是從左到右,從上到下依次增大的。題目分析 本題如果用挨個遍歷的話,顯然沒有利用上矩陣中的有序關係。我的做法是 將target的值與每行的最後乙個數進行比較,若最後乙個數小於target,那麼還要往下搜尋,將搜尋的行邊界的上界...

leetcode 74 搜尋二維矩陣

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

Leetcode 74 搜尋二維矩陣

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