📅  最后修改于: 2023-12-03 15:39:52.100000             🧑  作者: Mango
在搜索一个按行和按列排序的矩阵时,可以采用类似二分查找的方法来进行搜索。具体而言,我们可以选择从矩阵的左下角或者右上角开始,在每一步减少一行或者一列的搜索范围。
假设我们要搜索一个按行排序的矩阵,也就是说,每一行的元素都按照从小到大的顺序排列。我们可以从矩阵的左下角开始进行搜索。当前位置的元素 A[i][j] 有三种可能的情况:
不断重复上述过程,直到找到目标元素或者搜索范围为空。
def search_matrix(matrix, target):
m, n = len(matrix), len(matrix[0])
i, j = m - 1, 0
while i >= 0 and j < n:
if matrix[i][j] == target:
return True
elif matrix[i][j] < target:
j += 1
else:
i -= 1
return False
如果矩阵按列排序而不是按行排序,我们可以从矩阵的右上角开始进行搜索。当前位置的元素 A[i][j] 有三种可能的情况:
def search_matrix(matrix, target):
m, n = len(matrix), len(matrix[0])
i, j = 0, n - 1
while i < m and j >= 0:
if matrix[i][j] == target:
return True
elif matrix[i][j] < target:
i += 1
else:
j -= 1
return False
以上两个算法的时间复杂度均为 $O(m+n)$,其中 $m$ 和 $n$ 分别为矩阵的行数和列数。