📅  最后修改于: 2023-12-03 15:08:01.720000             🧑  作者: Mango
在已排好序的二维矩阵中查找给定的值。该矩阵具有以下特性:
考虑这样一个矩阵:
[
[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]
]
给定目标值5
,返回true
。
给定目标值20
,返回false
。
一个朴素的想法是,从右上角开始,每次将搜索区间缩小一行或一列,直到找到目标值,或者搜索区间为空。
这种方法的正确性可以通过反证法来证明。假设这个方法无法找到目标值target
,那么我们无法排除所有不包含目标值的行或列,因此必须排除所有行和列,从而排除整个矩阵,矛盾。
代码如下:
def searchMatrix(matrix, target):
if not matrix:
return False
m, n = len(matrix), len(matrix[0])
row, col = 0, n - 1
while row < m and col >= 0:
if matrix[row][col] == target:
return True
if matrix[row][col] < target:
row += 1
else:
col -= 1
return False
输入
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
输入
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 = 20
输出
False