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