74. 搜尋二維矩陣方法1 基準值:編寫乙個高效的演算法來判斷 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
思路:
以右上角為基準值 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,...