陣列 二分 LeetCode74 搜尋二維矩陣

2021-10-07 16:53:02 字數 1617 閱讀 5853

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