矩阵题解——搜索二维矩阵 II【LeetCode】

240. 搜索二维矩阵 II

 1.1 核心思想

  • 问题描述:给定一个 m x n 的二维矩阵,矩阵的每一行从左到右递增,每一列从上到下递增。判断目标值 target 是否存在于矩阵中。
  • 解决思路
    1. 从矩阵的右上角(或左下角)开始搜索。
    2. 如果当前元素等于 target,返回 True
    3. 如果当前元素小于 target,则排除当前行(因为当前行的所有元素都小于 target)。
    4. 如果当前元素大于 target,则排除当前列(因为当前列的所有元素都大于 target)。
    5. 重复上述步骤,直到找到 target 或搜索完整个矩阵。
1.2 具体步骤
  1. 初始化
    • 获取矩阵的行数 m 和列数 n
    • 初始化指针 i 和 j,分别指向矩阵的右上角(i = 0j = n - 1)。
  2. 搜索过程
    • 如果 matrix[i][j] == target,返回 True
    • 如果 matrix[i][j] < target,说明当前行的所有元素都小于 target,因此向下移动一行(i += 1)。
    • 如果 matrix[i][j] > target,说明当前列的所有元素都大于 target,因此向左移动一列(j -= 1)。
  3. 终止条件
    • 如果 i 超出矩阵的行数或 j 小于 0,说明搜索完整个矩阵仍未找到 target,返回 False

灵神的方法真的秒啊!

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        m, n = len(matrix), len(matrix[0])
        i, j = 0, n - 1  # 从右上角开始
        while i < m and j >= 0:  # 还有剩余元素
            if matrix[i][j] == target:
                return True  # 找到 target
            if matrix[i][j] < target:
                i += 1  # 这一行剩余元素全部小于 target,排除
            else:
                j -= 1  # 这一列剩余元素全部大于 target,排除
        return False
  • 时间复杂度:O(m+n),其中 m 和 n 分别为 matrix 的行数和列数。
  • 空间复杂度:O(1)。

你可能感兴趣的:(我的学习记录,矩阵篇_刷题笔记,矩阵,算法,线性代数,leetcode,python)