题目分析:
这一题其实就是一个变相的二分查找。
测试代码1 你可以用i标记行,j标记列。如果matrix[i][j] == target:
,就返回True,如果matrix[i][j] > target:
,就让j-1(往上一列),否则就让i+1(往后一个元素)。
测试代码2 先对最后一列进行判断,寻找目标在哪一行(二分或者循环),然后再对该行二分查找即可。
测试代码1: (Runtime: 40 ms, faster than 76.80% )
class Solution:
def searchMatrix(self, matrix: list, target: int) -> bool:
if len(matrix) == 0 or len(matrix[0]) == 0: return False
i = 0; j = len(matrix[0]) - 1
while i < len(matrix) and j >= 0:
if matrix[i][j] == target:
return True
elif matrix[i][j] > target:
j -= 1
else:
i += 1
return False
print(Solution().searchMatrix(matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]], target = 3)) #提交时请删除该行
测试代码2: (Runtime: 40 ms, faster than 76.80% )
class Solution:
def searchMatrix(self, matrix: list, target: int) -> bool:
for i in range(len(matrix)):
if len(matrix[0]) != 0 and matrix[i][len(matrix[0]) - 1] >= target:
start = 0; end = len(matrix[0])
while start < end:
mid = int((start + end) / 2)
if matrix[i][mid] == target:
return True
elif matrix[i][mid] > target:
end = mid
else:
start = mid + 1
break
return False
print(Solution().searchMatrix(matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]], target = 3)) #提交时请删除该行