Description
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
• Integers in each row are sorted from left to right.
• The first integer of each row is greater than the last integer of the previous row.
Example
Example 1:
Input:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
Output: true
Example 2:
Input:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
Output: false
Submissions
这是一个二维数据结构的查找, 查找最简单高效的方法便是二分法。因此我们只需记录行数,并根据每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数的矩阵特性,用二分查找定位目标元素可能会在哪一行,并进行判断此行列表中是否有目标元素即可。
实现代码如下:
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
row = len(matrix)
if row <= 0:
return False
if row == 1:
if target in matrix[0]:
return True
else:
return False
for i in range(row):
top = 0
bottom = len(matrix) - 1
while top <= bottom:
middle = (top + bottom) // 2
if target > max(matrix[middle]):
top = middle + 1
elif target < min(matrix[middle]):
bottom = middle - 1
elif target in matrix[middle]:
return True
else:
return False