题目描述:
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
思路梳理
- 如果将矩阵串联成一行元素,则结果是一个有序数组,
- 然后使用二分查找,寻找元素位置
- matrix没有shape属性
- end索引是长度减一
class Solution(object):
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if matrix == []:
return False
# 如果将矩阵串联成一行元素,则结果是一个有序数组,
# 然后使用二分查找,寻找元素位置
# matrix没有shape属性
# end索引是长度减一
rows, cols = len(matrix), len(matrix[0])
length = rows*cols
start = 0
end = length-1
while start<=end:
mid = (start+end)//2
num = matrix[mid//cols][mid%cols]
if target == num:
return True
elif target > num:
start = mid +1
else:
end = mid - 1
return False