📌  相关文章
📜  在排序的2D矩阵中搜索(按行主要顺序存储)(1)

📅  最后修改于: 2023-12-03 15:08:02.455000             🧑  作者: Mango

在排序的2D矩阵中搜索(按行主要顺序存储)

题目描述:在一个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),只需要常数级别的额外空间。