【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
相关推荐
HelloDam13 分钟前
基于元素小组的归并排序算法
后端·算法·排序算法
HelloDam13 分钟前
基于连贯性算法的多边形扫描线生成(适用于凸多边形和凹多边形)【原理+java实现】
算法
带娃的IT创业者1 小时前
《Python实战进阶》No39:模型部署——TensorFlow Serving 与 ONNX
pytorch·python·tensorflow·持续部署
Bruce-li__1 小时前
深入理解Python asyncio:从入门到实战,掌握异步编程精髓
网络·数据库·python
九月镇灵将1 小时前
6.git项目实现变更拉取与上传
git·python·scrapy·scrapyd·gitpython·gerapy
uhakadotcom1 小时前
Apache Airflow入门指南:数据管道的强大工具
算法·面试·github
小张学Python2 小时前
AI数字人Heygem:口播与唇形同步的福音,无需docker,无需配置环境,一键整合包来了
python·数字人·heygem
跳跳糖炒酸奶2 小时前
第四章、Isaacsim在GUI中构建机器人(2):组装一个简单的机器人
人工智能·python·算法·ubuntu·机器人
绵绵细雨中的乡音2 小时前
动态规划-第六篇
算法·动态规划
程序员黄同学2 小时前
动态规划,如何应用动态规划解决实际问题?
算法·动态规划