python-leetcode 63.搜索二维矩阵

题目:

给一个满足两条属性的m*n的整数矩阵:

每行中的整数从左到右按非严格递增顺序排列

每行的第一个整数大于前一行的最后一个整数

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


方法一:两次二分查找

由于每行的第一个元素大于前一行的最后一个元素,且每行元素是升序的,所以每行的第一个元素大于前一行的第一个元素,因此矩阵第一列的元素是升序的。

对矩阵的第一列元素二分查找,找到最后一个不大于目标值的元素,然后在该元素所在行中二分查找目标是否存在

复制代码
class Solution(object):
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        row=bisect.bisect_right([row[0] for row in matrix],target)#用列表推导式获取所有行的第一个元素组成列表,返回的是第一个大于target的行首元素的位置
        if row==0: #如果row为0,表示所有行的第一个元素都大于target,矩阵中不可能存在该值
            return False
        target_row=matrix[row-1]#获取可能包含target的行(row-1位置的这一行)
        pos=bisect.bisect_left(target_row,target)#在目标行中使用bisect_left进行二分查找,找到target应该插入的位置
        return pos<len(target_row)and target_row[pos]==target#检查找到的位置是否有效且该位置的元素确实等于target

时间复杂度:O(logm+logn)=O(logmn),其中mn分别是矩阵的行数和列数

空间复杂度:O(1)


方法二:一次二分查找

若将矩阵每一行拼接在上一行的末尾,则会得到一个升序数组,我们可以在该数组上二分找到目标元素。

python 复制代码
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 = -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 = mid
            else:
                right = mid
        return False

        

时间复杂度:O(logm+logn)=O(logmn),其中mn分别是矩阵的行数和列数

空间复杂度:O(1)

源自力扣官方题解和灵茶山艾府

相关推荐
今天没有盐3 分钟前
Pandas完全指南:从Series到DataFrame,掌握数据分析核心技能
python·pycharm·编程语言
暴风鱼划水8 分钟前
算法题(Python)数组篇 | 4.长度最小的子数组
python·算法·力扣
B站计算机毕业设计之家30 分钟前
大数据python招聘数据分析预测系统 招聘数据平台 +爬虫+可视化 +django框架+vue框架 大数据技术✅
大数据·爬虫·python·机器学习·数据挖掘·数据分析
7澄133 分钟前
深入解析 LeetCode 数组经典问题:删除每行中的最大值与找出峰值
java·开发语言·算法·leetcode·intellij idea
新手村领路人1 小时前
python打包成exe
python·打包
胡桃不是夹子1 小时前
torch和torchvision对应版本匹配官网下载
人工智能·python·深度学习
Q_Q19632884752 小时前
python+django/flask基于深度学习的个性化携程美食数据推荐系统
spring boot·python·深度学习·django·flask·node.js·php
胡耀超2 小时前
通往AGI的模块化路径:一个可能的技术架构(同时解答微调与RAG之争)
人工智能·python·ai·架构·大模型·微调·agi
清空mega2 小时前
从零开始搭建 flask 博客实验(常见疑问)
后端·python·flask
xier_ran2 小时前
关键词解释:DAG 系统(Directed Acyclic Graph,有向无环图)
python·算法