240.搜索二维数组 二分法

思路:

  1.  暴力法加些限制条件 

    1) row<3 or col<3

    2)   matrix[ i ][ j ] > target: break

    3)  matirx[ i ][ 0 ] > target: return False

  2.  二分法(binary_search) :

    1) 判断循环进行条件:  (带等号是因为考虑到 l=r 时候取到答案)

      while l<=r:

    2). 判等条件为    (感觉可改进提高)

      if matrix[i][l] == target or matrix[i][r] == target or matrix[i][mid] == target:  return True
              3)其配合的 端点更新为:
                if matrix[i][mid]<target:
                    l = mid+1
                elif matrix[i][mid]>target:
                    r = mid-1

代码:

class Solution:
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        if not matrix or len(matrix[0])==0:
            return False
        def binary_search(i,matrix,target):
            if matrix[i][0]>target:
                return 'False'
            l = 0
            r = len(matrix[i])-1
            while l<=r:
                mid = l + (r-l)//2
                if matrix[i][l] == target or matrix[i][r] == target or matrix[i][mid] == target:
                    return True
                if matrix[i][mid]<target:
                    l = mid+1
                elif matrix[i][mid]>target:
                    r = mid-1
            return False
        nr = len(matrix)
        nc = len(matrix[0])
        for i in range(nr):
            res = binary_search(i,matrix,target)
            print('res:')
            print(res)
            if res == 'False':
                break
            elif res == True:
                return True

        return False
原文地址:https://www.cnblogs.com/ChevisZhang/p/12883306.html