📅  最后修改于: 2023-12-03 15:08:02.455000             🧑  作者: Mango
题目描述:在一个n行m列的二维矩阵中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列。现在给定一个目标值,要求判断该值是否存在于矩阵中。
解题思路:
因为每一行和每一列都是递增的,所以可以从第一行的末尾开始查找,如果该数字小于目标值,则可以往下一行查找,反之则往前一列查找,直到找到目标值或者越界为止。
例如,给定以下的矩阵:
1 3 5 7
10 11 16 20
23 30 34 50
如果要查找目标值为16,则从第一行末尾的7开始,因为比16小,所以往下一行查找,即第二行的第四列的20,因为比16大,所以又往前一列查找,即第二行的第三列的16,找到目标值。
代码实现:
def searchMatrix(matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if not matrix:
return False
row, col = 0, len(matrix[0])-1 # 从第一行的末尾开始查找
while row < len(matrix) and col >= 0:
if matrix[row][col] == target: # 找到目标值
return True
elif matrix[row][col] < target: # 目标值比当前值大,往下一行查找
row += 1
else: # 目标值比当前值小,往前一列查找
col -= 1
return False
时间复杂度:O(m+n),其中m为矩阵的行数,n为矩阵的列数。因为每次循环可以排除一行或一列,所以最多循环m+n次。
空间复杂度:O(1),只需要常数级别的额外空间。