0
点赞
收藏
分享

微信扫一扫

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

诗与泡面 2022-01-30 阅读 53

 

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

 遍历法优化加强版:大于右上角最后一个元素 下移 否则左移动 注意特殊情况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

 

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

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

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

 

新年快乐!在新的一年除了要好好刷算法 也要天天开心 坚持每日一题 

 

举报

相关推荐

0 条评论