📜  螺旋排序矩阵中的搜索元素(1)

📅  最后修改于: 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)$,只使用了常数个额外变量。