leetcode 每日一题 74. 搜索二维矩阵

二分法

思路:

方法①:由于矩阵是有序的,先二分法找到所在行,再二分法找到所在列。

方法②:根据行列映射关系,直接二分法查找二维矩阵。

代码一:

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        if not matrix or not matrix[0]:
            return False
        rowSize = len(matrix)
        colSize = len(matrix[0])
        rowl = 0
        rowr = rowSize-1
        while rowl<rowr:
            rowmid = (rowl+rowr)//2
            if matrix[rowmid][colSize-1] >= target:
                rowr = rowmid
            else:
                rowl = rowmid+1
        l = 0
        r = colSize-1
        while l <= r:
            mid = (l+r)//2
            if matrix[rowr][mid] > target:
                r = mid -1 
            elif matrix[rowr][mid] < target:
                l = mid +1
            else:
                return True
        return False

代码二:

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        m = len(matrix)
        if m == 0:
            return False
        n = len(matrix[0])
        left, right = 0, m * n - 1
        while left <= right:
                mid = (left + right) // 2
                midElement = matrix[mid // n][mid % n]
                if target == midElement:
                    return True
                else:
                    if target < midElement:
                        right = mid - 1
                    else:
                        left = mid + 1
        return False

 

 

 

posted @ 2020-06-12 08:15  nil_f  阅读(216)  评论(0)    收藏  举报