LeetCode热题100-搜索二维矩阵

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

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

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

示例 1:

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

通过读题极容易想到暴力方法,代码如下:时间复杂度On2

python 复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        if not matrix:
            return False
        m = len(matrix)
        n = len(matrix[0])

        for i in range(m):
            for j in range(n):
                if matrix[i][j] == target:
                    return True
        return False
        

使用二分法,将二维数组拼接为一维,利用有序特点,时间复杂度log(m*n)

python 复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        if not matrix or not matrix[0]:
            return False
        
        m, n = len(matrix), len(matrix[0])
        left, right=0, m * n - 1
        while left <= right:
            mid = (left + right) // 2
            row, col = mid // n, mid % n
            if matrix[row][col] == target:
                return True
            elif matrix[row][col] < target:
                left = mid + 1
            else:
                right = mid - 1
        return False
相关推荐
_Narcissus_9 小时前
分治&递归
数据结构·c++·笔记·算法·leetcode·递归·分治
明志数科9 小时前
具身智能数据工程全链路解析:从真实产线采集到LeRobot适配
网络·人工智能·算法
小O的算法实验室9 小时前
AAAI-26,Lehmer编码搜索排列空间的理论与实证分析
算法
lch2011_yb9 小时前
CSP-S 2023 密码锁 题解
算法
OPEN-F10 小时前
C++进阶教程:运算符重载与类型转换
java·c++·算法
牧杉-惊蛰10 小时前
将数组对象根据自定义排列
java·开发语言·算法
inquisiter10 小时前
损失函数在标量和矩阵上的求导对比
线性代数·算法·矩阵
离凌寒11 小时前
一、关于st上制作外部烧录算法时软件识别不到算法文件的问题总结
算法
青 春 记 忆12 小时前
LeetCode 283. 移动零|Python 解法详解
python·算法·leetcode