📅  最后修改于: 2023-12-03 15:41:32.369000             🧑  作者: Mango
在一个矩阵中,每一行都按照升序排列,每一列也按照升序排列。现在给定一个目标值,写一个函数来判断这个目标值是否在这个矩阵中。
矩阵可以视为一个螺旋,从左上角一直旋转到右下角。因此我们可以从右上角或者左下角开始搜索,通过不断比较目标值和当前元素的大小,缩小搜索范围。
下面是一个使用二叉搜索树的实现。
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
if not matrix: # 处理空矩阵
return False
rows, cols = len(matrix), len(matrix[0])
r, c = 0, cols - 1 # 右上角开始
while 0 <= r < rows and 0 <= c < cols:
if matrix[r][c] == target:
return True
elif matrix[r][c] > target: # target在当前元素的左边
c -= 1
elif matrix[r][c] < target: # target在当前元素的下面
r += 1
return False
时间复杂度:$O(m + n)$,其中 $m$ 为矩阵的行数,$n$ 为矩阵的列数。
空间复杂度:$O(1)$,只使用了常数个额外变量。