【hot100】刷题记录(29)-搜索二维矩阵

题目描述:

给你一个满足下述两条属性的 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

我的作答:

每行每列搜索,因为矩阵是有序的;

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])
        i, j = 0, 0
        while i<m and target>matrix[i][n-1]: #比每行的最后一个数大就跳过,+1
            i += 1
        if i>=m: return False #如果每行都比target小就false
        while j<n and target>matrix[i][j]: #该行的列搜索
            j += 1
        if j>=n: return False #如果该行没有就false
        if target!=matrix[i][j]: #跳出循环此时matrix[i][j]应该>=target
            return False
        else: return True

时间复杂度O(m+n),空间复杂度O(1)

参考:

二分法O(logmn)

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 = mid
            else:
                right = mid
        return False
相关推荐
小关会打代码11 分钟前
关于Pycharm中在运行出现语法错误:Non-UTF-8 code starting with
ide·python·pycharm
用户37215742613511 分钟前
Python 高效将 PDF 转换为 HTML 的实用指南
python
深栈13 分钟前
机器学习:编码方式
人工智能·python·机器学习·编码
yzx99101317 分钟前
Django 搭配数据库开发智慧园区系统全攻略
python·django·数据库开发
PixelMind25 分钟前
【LLIE技术专题】 SCI代码讲解
图像处理·python·低照度图像增强·llie
萘柰奈29 分钟前
LeetCode刷题记录----62.不同路径(Medium)
算法·leetcode·职场和发展
阳光明媚sunny35 分钟前
爬楼梯算法java实现
算法·动态规划
天才测试猿1 小时前
Python常用自动化测试框架—Pytest详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
胡耀超1 小时前
2、CPU深度解析:从微架构到性能优化
python·性能优化·架构·arm·cpu·x86·多核心
贝塔实验室1 小时前
LDPC码的概念
科技·学习·程序人生·算法·学习方法·程序员创富·改行学it