Leedcode 每日一练 搜索二维矩阵Ⅰ Python实现

简介: Leedcode 每日一练 搜索二维矩阵Ⅰ Python实现

大一在读 大数据管理与应用专业 欢迎交流

备战蓝桥杯 倒计时70天

目前主要学习Python算法与数据结构

算法人算法魂 算法题让我们敢于挑战自己做意想不到的事情

快来试试今天的每日一练吧 Python小伙伴



问题描述:

image.png




来感受一下Python的简洁:遍历法(比较慢)

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        for i in matrix:
            if target in i:return True
        return False

image.png

遍历法优化加强版:大于右上角最后一个元素 下移 否则左移动 注意特殊情况i>len(matrix)-1


class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        i=0
        while matrix[i][-1]<target:
            i+=1
            if i>len(matrix)-1:return False
        return True if target in matrix[i] else False

image.png

终极加强版:二分法(对上一种的再次优化)


我们不再通过遍历查找’右上角‘元素 而是通过二分法查找 再在内部进行二分


class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        m,n=len(matrix[0]),len(matrix)
        l,r=-1,len(matrix)
        while l+1<r:
            mid=(l+r)//2
            if matrix[mid][-1]>=target:#r指向右上角大于等于target的编号
                r=mid
            else:
                l=mid#l指向右上角小于target的元素
        if r==len(matrix):return False#特殊情况
        l1,r1=0,len(matrix[r])-1
        while l1<=r1:
            mid1=(l1+r1)//2
            if matrix[r][mid1]>target:
                r1=mid1-1
            elif matrix[r][mid1]<target:
                l1=mid1+1
            else:
                return True
        return False


image.png

效率一般 说明有时利用好Python内置的函数反而更快 不过这种思想要掌握


第一次二分查找时 二分写法利用了区域划分的写法

可以有效地防止出错 可以看我这篇博客 传送门!

https://blog.csdn.net/m0_62277756/article/details/122711847?spm=1001.2014.3001.5501


目录
相关文章
|
1月前
|
Python
Python计算误码率,输入是0-1比特流矩阵和小数矩阵
本文提供了一个Python函数calculate_ber,用于计算两个NumPy矩阵表示的二进制信号和接收信号之间的误码率(BER),其中包括信号与接收信号的比较、误差计数以及BER的计算过程,并给出了具体的使用示例。
39 2
|
30天前
|
安全 应用服务中间件 网络安全
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
30 11
|
10天前
|
Python
Python 练习实例44 - Python 两个矩阵相加
Python 练习实例44 - Python 两个矩阵相加
|
1月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
21 4
|
1月前
|
算法 Python
【Leetcode刷题Python】73. 矩阵置零
本文介绍了LeetCode第73题的解法,题目要求在给定矩阵中将所有值为0的元素所在的行和列全部置为0,并提供了一种原地算法的Python实现。
17 0
【Leetcode刷题Python】73. 矩阵置零
|
2月前
|
算法 数据处理 索引
告别低效搜索!Python中Trie树与Suffix Tree的实战应用秘籍!
【7月更文挑战第21天】探索Python中的字符串搜索效率提升:使用Trie树与Suffix Tree。Trie树优化单词查询,插入和删除,示例展示其插入与搜索功能。Suffix Tree,复杂但强大,适用于快速查找、LCP查询。安装[pysuffixtree](https://pypi.org/project/pysuffixtree/)库后,演示查找子串及最长公共后缀。两者在字符串处理中发挥关键作用,提升数据处理效率。**
34 1
|
2月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
【7月更文挑战第19天】Trie树,又称前缀树,是优化字符串搜索的高效数据结构。通过利用公共前缀,Trie树能快速插入、删除和查找字符串。
69 2
|
2月前
|
算法 数据挖掘 数据处理
搜索新境界:Python二分查找变种实战,精准定位数据不是梦!
【7月更文挑战第13天】二分查找算法以O(log n)效率在有序数组中查找数据。基础算法通过不断分割数组对比中间元素。Python实现变种包括:1) 查找目标值的第一个出现位置,找到后向左搜索;2) 查找目标值的最后一个出现位置,找到后向右搜索。这些变种在数据分析和索引构建等场景中极具价值,提升处理效率。
50 6
|
2月前
|
Python
二分查找变种大赏!Python 中那些让你效率翻倍的搜索绝技!
【7月更文挑战第12天】二分查找是高效搜索算法,适用于有序数组。基础原理是对比中间元素,按目标值大小在左右两侧递归查找。
29 4
|
1月前
|
算法 Python
【Leetcode刷题Python】74. 搜索二维矩阵
两种解决LeetCode "搜索二维矩阵" 问题的方法的Python实现。第一种方法是从二维矩阵的右上角开始线性搜索,通过比较当前元素与目标值来决定搜索方向。第二种方法是将二维矩阵视为一维数组进行二分查找,通过计算中间元素的行列索引来更新搜索区间。两种方法都旨在高效地判断目标值是否存在于给定的有序二维矩阵中。
21 0