240. Search a 2D Matrix II
二维版二分查找
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
m, n = len(matrix), len(matrix[0])
def helper(rlo, rhi, clo, chi):
if rlo >= rhi or clo >= chi:
return False
rmid, cmid = rlo + (rhi-rlo)//2, clo + (chi-clo)//2
if matrix[rmid][cmid] == target:
return True
elif matrix[rmid][cmid] > target: # 矩阵的右下角也必大于target故排除
return helper(rlo, rmid, clo, chi) or helper(rlo, rhi, clo, cmid)
else: # 矩阵的左上角也必小于target故排除
return helper(rmid+1, rhi, clo, chi) or helper(rlo, rhi, cmid+1, chi)
return helper(0, m, 0, n)