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

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

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


备战蓝桥杯 倒计时70天


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


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


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


问题描述:

ca24a0c5933f443e9f7fb180fcc46253.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

85241ba827c14bd5a577f2b9ad641f83.png

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

2f27359f841d44b5a4dd947a4d1f16be.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

7149bc7cc3cc449287bcfdb7669462a0.png

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

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


相关文章
|
20天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
PYTHON TENSORFLOW 2二维卷积神经网络CNN对图像物体识别混淆矩阵评估|数据分享
PYTHON TENSORFLOW 2二维卷积神经网络CNN对图像物体识别混淆矩阵评估|数据分享
|
1月前
|
人工智能 机器人 测试技术
【python】python求解矩阵的转置(详细讲解)
【python】python求解矩阵的转置(详细讲解)
|
1天前
|
Python
【Python进阶(五)】——模块搜索及工作目录
【Python进阶(五)】——模块搜索及工作目录
|
6天前
|
Python
Python中的反对称矩阵(Skew-Symmetric Matrices)
Python中的反对称矩阵(Skew-Symmetric Matrices)
13 2
|
6天前
|
人工智能 Python
Python中的反对称矩阵:理论、应用与代码实践
Python中的反对称矩阵:理论、应用与代码实践
24 1
|
12天前
|
机器学习/深度学习 Python
【Python 机器学习专栏】混淆矩阵与 ROC 曲线分析
【4月更文挑战第30天】本文介绍了机器学习中评估模型性能的两种工具——混淆矩阵和ROC曲线。混淆矩阵显示了模型在不同类别上的预测情况,包括真正例、假正例、真反例和假反例,帮助评估模型错误类型和数量。ROC曲线则通过假正率和真正率展示了模型的二分类性能,曲线越接近左上角,性能越好。文章还提供了Python中计算混淆矩阵和ROC曲线的代码示例,强调它们在模型选择、参数调整和理解模型行为中的应用价值。
|
12天前
|
机器学习/深度学习 Python
【Python 机器学习专栏】模型选择中的交叉验证与网格搜索
【4月更文挑战第30天】交叉验证和网格搜索是机器学习中优化模型的关键技术。交叉验证通过划分数据集进行多次评估,如K折和留一法,确保模型性能的稳定性。网格搜索遍历预定义参数组合,寻找最佳参数设置。两者结合能全面评估模型并避免过拟合。Python中可使用`sklearn`库实现这一过程,但需注意计算成本、过拟合风险及数据适应性。理解并熟练应用这些方法能提升模型性能和泛化能力。
|
24天前
|
存储 搜索推荐 算法
python推荐系统实现(矩阵分解来协同过滤)
python推荐系统实现(矩阵分解来协同过滤)
|
25天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
|
25天前
|
机器学习/深度学习
模型选择与调优:scikit-learn中的交叉验证与网格搜索
【4月更文挑战第17天】在机器学习中,模型选择和调优至关重要,scikit-learn提供了交叉验证和网格搜索工具。交叉验证(如k折、留一法和分层k折)用于评估模型性能和参数调优。网格搜索(如GridSearchCV和RandomizedSearchCV)遍历或随机选择参数组合以找到最优设置。通过实例展示了如何使用GridSearchCV对随机森林模型进行调优,强调了理解问题和数据的重要性。