编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
·每行的元素从左到右升序排列。
·每列的元素从上到下升序排列。
第一种:暴力遍历
m = len(matrix)
n = len(matrix[0])
for i in range(m):
if matrix[i][0] <= target and matrix[i][n - 1] >= target:
for j in matrix[i]:
if j == target:
return True
return False
第二种:左下角向右上逼近。利用题目数组的性质“比左下角小的数,在上方,行数小;比左下角大的数,在右边,列数大”
m = len(matrix)
n = len(matrix[0])
#剪枝
if m == 0 or n == 0:
return False
i = m - 1
j = 0
while i >= 0 and j < n:
if matrix[i][j] == target:
return True
elif matrix[i][j] < target:
j += 1
else:
i -= 1
return False