LeetCode Python - 74. 搜索二维矩阵


题目描述

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:
在这里插入图片描述

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:
在这里插入图片描述

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 100
  • -104 <= matrix[i][j], target <= 104

解法

方法一:二分查找

我们将二维矩阵逻辑展开,然后二分查找即可。

时间复杂度 O(log(m×n))。其中 m 和 n 分别是矩阵的行数和列数。空间复杂度 O(1)。

class Solution(object):
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        m, n = len(matrix), len(matrix[0])
        left, right = 0, m * n - 1
        while left < right:
            mid = (left + right) >> 1
            x, y = divmod(mid, n)
            if matrix[x][y] >= target:
                right = mid
            else:
                left = mid + 1
        return matrix[left // n][left % n] == target

方法二:从左下角或右上角搜索

这里我们以左下角作为起始搜索点,往右上方向开始搜索,比较当前元素 matrix[i][j] 与 target 的大小关系:

  • 若 matrix[i][j]=target,说明找到了目标值,直接返回 true。
  • 若 matrix[i][j]>target,说明这一行从当前位置开始往右的所有元素均大于 target,应该让 i 指针往上移动,即
    i=i−1。
  • 若 matrix[i][j]<target,说明这一列从当前位置开始往上的所有元素均小于 target,应该让 j 指针往右移动,即
    j=j+1。

若搜索结束依然找不到 target,返回 false。

时间复杂度 O(m+n)。其中 m 和 n 分别是矩阵的行数和列数。空间复杂度 O(1)。

class Solution(object):
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        m, n = len(matrix), len(matrix[0])
        i, j = m - 1, 0
        while i >= 0 and j < n:
            if matrix[i][j] == target:
                return True
            if matrix[i][j] > target:
                i -= 1
            else:
                j += 1
        return False

运行结果

方法一

在这里插入图片描述

方法二

在这里插入图片描述

相关推荐

  1. 74.搜索矩阵

    2024-03-29 12:12:04       75 阅读
  2. 74. 搜索矩阵

    2024-03-29 12:12:04       59 阅读
  3. 74. 搜索矩阵

    2024-03-29 12:12:04       55 阅读
  4. 74. 搜索矩阵

    2024-03-29 12:12:04       30 阅读
  5. 【算法题】74. 搜索矩阵

    2024-03-29 12:12:04       45 阅读
  6. leetcode 74.搜索矩阵

    2024-03-29 12:12:04       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 12:12:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 12:12:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 12:12:04       82 阅读
  4. Python语言-面向对象

    2024-03-29 12:12:04       91 阅读

热门阅读

  1. React Material UI A Blogging Platform

    2024-03-29 12:12:04       30 阅读
  2. C语言基于TCP的多线程服务器

    2024-03-29 12:12:04       41 阅读
  3. 【Rust】——编写自动化测试(一)

    2024-03-29 12:12:04       40 阅读
  4. VLAN间通信(链路聚合)

    2024-03-29 12:12:04       40 阅读
  5. selenium

    2024-03-29 12:12:04       37 阅读
  6. [OpenAI]继ChatGPT后发布的Sora模型原理与体验通道

    2024-03-29 12:12:04       37 阅读
  7. Leetcode字符串专项

    2024-03-29 12:12:04       41 阅读
  8. 记web项目的一个大文件上传排查笔记

    2024-03-29 12:12:04       40 阅读
  9. 查看docker中mysql是否开启

    2024-03-29 12:12:04       35 阅读
  10. skywalking

    2024-03-29 12:12:04       40 阅读