【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
相关推荐
渣渣苏2 分钟前
Langchain实战快速入门
人工智能·python·langchain
Wei&Yan5 分钟前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code
lili-felicity11 分钟前
CANN模型量化详解:从FP32到INT8的精度与性能平衡
人工智能·python
数据知道14 分钟前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
ZH154558913126 分钟前
Flutter for OpenHarmony Python学习助手实战:面向对象编程实战的实现
python·学习·flutter
玄同76527 分钟前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
User_芊芊君子32 分钟前
CANN010:PyASC Python编程接口—简化AI算子开发的Python框架
开发语言·人工智能·python
团子的二进制世界39 分钟前
G1垃圾收集器是如何工作的?
java·jvm·算法
白日做梦Q43 分钟前
Anchor-free检测器全解析:CenterNet vs FCOS
python·深度学习·神经网络·目标检测·机器学习
吃杠碰小鸡43 分钟前
高中数学-数列-导数证明
前端·数学·算法