力扣热题100之搜索二维矩阵 II

题目

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

每行的元素从左到右升序排列。

每列的元素从上到下升序排列。

代码

方法一:直接全体遍历

这个方法很直接,但是居然没有超时,很震惊

bash 复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        for row in matrix:
            for element in row:
                if element==target:
                    return True
        return False

方法一:缩小搜索范围(自己想方法)

这个方法是通过边界缩小搜索的范围

bash 复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        m=len(matrix)
        n=len(matrix[0])
        row=0
        col=0
        for i in range(m):
            if matrix[i][n-1]>target:
                row=i
                break
            elif matrix[i][n-1]==target:
                return True
        for j in range(n):
            if matrix[m-1][j]>target:
                col=j
                break
            elif matrix[m-1][j]==target:
                return True
        for i in range(row,m-1):
            for j in range(col,n-1):
                if matrix[i][j]==target:
                    return True
        return False        

方法三:二分法

在矩阵的每一行中使用二分法查找target的应该插入的位置索引,代码中是使用的bisect中的bisect_left函数实现的

bisect_left是返回第一个大于等于目标值的位置(即插入后目标值位于所有相同值左侧)

bisect_left是返回第一个严格大于目标值的位置(即插入后目标值位于所有相同值右侧)

bash 复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        for row in matrix:
            idx=bisect.bisect_left(row, target)
            if idx<len(row) and row[idx]==target:
                return True
        return False

方法四:Z字形搜索

该方法就是从矩阵的右上角开始往矩阵的右下角搜索,如果当前值大于target,列标减一;如果当前值小于target,行标加一。很巧妙很有意思的一种方法

bash 复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        m,n=len(matrix),len(matrix[0])
        x,y=0,n-1
        while x<m and y>=0:
            if matrix[x][y]==target:
                return True
            if matrix[x][y]>target:
                y-=1
            else:
                x+=1
        return False
相关推荐
总有刁民想爱朕ha5 小时前
车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)
开发语言·python·数据挖掘
人衣aoa6 小时前
Python编程基础(八) | 类
开发语言·python
大模型真好玩6 小时前
深入浅出LangGraph AI Agent智能体开发教程(四)—LangGraph全生态开发工具使用与智能体部署
人工智能·python·mcp
百锦再6 小时前
脚本语言的大浪淘沙或百花争艳
java·开发语言·人工智能·python·django·virtualenv·pygame
掘技术7 小时前
十个 Python 案例分享
python
沧海一粟青草喂马8 小时前
抖音批量上传视频怎么弄?抖音矩阵账号管理的专业指南
大数据·人工智能·矩阵
ZZHow10249 小时前
02OpenCV基本操作
python·opencv·计算机视觉
计算机学长felix9 小时前
基于Django的“酒店推荐系统”设计与开发(源码+数据库+文档+PPT)
数据库·python·mysql·django·vue
站大爷IP9 小时前
Python随机数函数全解析:5个核心工具的实战指南
python
悟乙己9 小时前
使用 Python 中的强化学习最大化简单 RAG 性能
开发语言·python·agent·rag·n8n