leetcode 240. 搜尋二維矩陣 II【陣列】【Medium】&&劍指Offer面試題4:二維陣列中的查詢
阿新 • • 發佈:2018-11-10
題目:
編寫一個高效的演算法來搜尋 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, 24],
[18, 21, 23, 26, 30]
]
給定 target = 5,返回 true。
給定 target = 20,返回 false。
思路:
該題的難點在於如何選取二維陣列中的一個參照數來與target值進行比較。如果這個值選在了二維陣列中間的某一個數,如果陣列的值剛好等於target的值時,就結束查詢過程;如果選取的數字小於要查詢的數字。那麼根據陣列的排列順序規則,要查詢的數字應該在當前選取位置的右邊或者下邊。同樣,如果選取的數字大於target的值,那麼要查詢的數字應該在當前選取位置的上邊或者左邊。如下圖:
上面分析的方法要查詢的數字在兩個區域出現且有重疊,問題就變得更復雜了。
因此,我們可以從最右上角的數字開始選起。15和5比較,15>5,那麼應該去除掉15那一列的值。接著11>5,去除掉11那一列的值;7>5,去除掉7那一列的值;4<5,去除掉4那一行的值;5=5,找到存在目標值。
程式碼:
class Solution(object): def searchMatrix(self, matrix, target): """ :type matrix: List[List[int]] :type target: int :rtype: bool """ if matrix == None or matrix == []: return False row = len(matrix) col = len(matrix[0]) i,j = 0,col-1 while i<row and j>=0: if matrix[i][j] == target: return True elif matrix[i][j] < target: i += 1 else: j -= 1 return False