class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
n = len(matrix)
if n == 0:
return False
m = len(matrix[0])
if m == 0:
return False
row = 0
col = m-1
while row < n and col >= 0:
if matrix[row][col]<target and row<=n-1:
row += 1
elif matrix[row][col]>target and col>=0:
col -= 1
elif matrix[row][col]==target:
return True
return False
注意:有序二维矩阵,从右上角开始找起,遇到比target的大的就往左边找,遇到比tartget小的就往下边找,每次只用移动一格,时间复杂度log(m+n),如果m和n再更大的话可以每行用二分查找,如下:
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
if matrix == []:
return False
m = len(matrix)
n = len(matrix[0])
for i in range(m):
left = 0
right = n-1
while left<=right:
mid =(left+right)//2
if matrix[i][mid]==target:
return True
elif matrix[i][mid]<target:
left = mid + 1
elif matrix[i][mid]>target:
right = mid - 1
return False