編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。
該矩陣具有如下特性:
每行中的整數從左到右按公升序排列。每行的第乙個整數大於前一行的最後乙個整數(變成了240題的特例)。
通用模板就看 leetcode240:搜尋二維矩陣ii
本題解法在240基礎上加了優化
因為每一行遞增,每一列遞增。所以我們可以從右上角往左下角找或者從左下角往右上角找。
每次比較可以排除一行或者一列,時間複雜度為o(m+n)
class solution(object):
def searchmatrix(self, matrix, target):
# m * n
m = len(matrix)
if m == 0:
return false
n = len(matrix[0])
# 左下角(必須這麼設定!左下角:最後一行的最小值)從下向上
row = m - 1
col = 0
while row >= 0 and col <= n-1:
# 優化:當前行的最大值 < target
if matrix[row][n-1] < target:
return false
if matrix[row][col] > target:
row -= 1
elif matrix[row][col] < target:
col += 1
else:
return true
return false
# # 右上角(必須這麼設定!右上角:第一行的最大值)從上向下
# row = 0 # 行
# col = n - 1 # 列
# while row <= m-1 and col >= 0:
# # 優化:當前行的最小值 > target
# if matrix[row][0] > target:
# return false
# if matrix[row][col] > target: # 在本行中
# col -= 1
# elif matrix[row][col] < target: # 加行
# row += 1
# else:
# return true
# return false
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]target = 3
s = solution()
print(s.searchmatrix(matrix, target))
將二維矩陣拖為一維矩陣,然後就是乙個有序的一維陣列了,利用二分查詢就 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,...