LeetCode 分类刷题:74. 搜索二维矩阵

题目

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

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

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

解析

由于矩阵的每一行是递增的,且每行的第一个数大于前一行的最后一个数,如果把矩阵每一行拼在一起,我们可以得到一个递增数组。

例如示例 1,三行拼在一起得

a=1,3,5,7,10,11,16,20,23,30,34,60
由于这是一个有序数组,我们可以用二分查找判断 target 是否在 matrix 中。

一般地,有

  • ai=matrix ⌊i/n⌋ i mod n

作者:灵茶山艾府

链接:https://leetcode.cn/problems/search-a-2d-matrix/submissions/668071757/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

答案

自己写的

python 复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        row = len(matrix)
        col = len(matrix[0])
        for i in range(row):    # 遍历每一行,进行二分查找
            left = -1
            right = col - 1
            if matrix[i][right] < target:    # 当前行最大值小于target,直接跳至下一行
                continue
            while left + 1 < right:
                mid = (left + right) // 2
                if matrix[i][mid] < target:    # left恒小于target,right恒大于等于target
                    left = mid
                else:
                    right = mid
            if matrix[i][right] == target:    # right指向第一个大于等于target元素
                return True
        return False

灵神答案

python 复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        m, n = len(matrix), len(matrix[0])
        left, right = -1, m * n
        while left + 1 < right:
            mid = (left + right) // 2
            x = matrix[mid // n][mid % n]
            if x == target:
                return True
            if x < target:    # left恒指向小于target的元素,right恒指向大于target的元素
                left = mid    # target的搜索范围为开区间(left, right)
            else:
                right = mid 
        return False

复杂度分析

我的答案:

时间复杂度:O(mlog(n)),其中 m 和 n 分别为 matrix 的行数和列数。

空间复杂度:O(1)。

灵神答案:

时间复杂度:O(log(mn)),其中 m 和 n 分别为 matrix 的行数和列数。

空间复杂度:O(1)。

作者:灵茶山艾府

链接:https://leetcode.cn/problems/search-a-2d-matrix/submissions/668071757/

来源:力扣(LeetCode)

相关推荐
GreenTea20 分钟前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
2603_9651481144 分钟前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
fqq31 小时前
力扣刷题前置Java语法
算法·leetcode·职场和发展
jufeng13072 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 8 篇】
python·ai agent·配置系统
circuitsosk2 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
2601_956319883 小时前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
过期的秋刀鱼!4 小时前
LangChain-D1-模型的工作流程
人工智能·python·langchain
半夏微凉半夏殇4 小时前
x11与weston对比,优先选哪个
leetcode·均值算法·eclipse
2501_906565124 小时前
数学之美探究
算法
萤火工厂目视化设计4 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造