LeetCode #74 Search a 2D Matrix

题目

Search a 2D Matrix


解题方法

实质上就是先对第一列进行二分查找,再对比较小的那个行做行内二分查找。注意二分查找选择结束值的时候,这里要选below,即right值,因为是要在小的那一行找,如果选了above就是在大的那一行找了,就错了。


代码

class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        if not matrix or not matrix[0]:
            return False
        
        m = len(matrix)
        n = len(matrix[0])
        row = 0
        
        above = 0
        below = m - 1
        while above <= below:
            mid = (above + below) // 2
            if matrix[mid][0] == target:
                return True
            elif matrix[mid][0] > target:
                below = mid - 1
            else:
                above = mid + 1
        row = below
        
        left = 0
        right = n - 1
        while left <= right:
            mid = (left + right) // 2
            if matrix[row][mid] == target:
                return True
            elif matrix[row][mid] > target:
                right = mid - 1
            else:
                left = mid + 1
        return False
posted @ 2020-10-14 15:42  老鼠司令  阅读(44)  评论(0)    收藏  举报