要求
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。 每列的元素从上到下升序排列。
示例 1:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
示例 2:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false
代码详情
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
if not matrix:
return False
left,right = 0,len(matrix[0])-1
while left < len(matrix) and right>=0:
if matrix[left][right] == target:
return True
elif matrix[left][right] < target:
left += 1
else:
right -= 1
return False
解题思路:我们的搜索方式将右上角第一个数字作为比较的第一个数字,当和目标数字相同的时候,我们直接返回真即可,当比目标数字小的时候,我们知道,小的数字在左边,下面的都比这个数字大,我们当前数字比较小,所以我们需要向下走,left控制向下,所以left + 1;当比目标数字大的时候,我们知道,小的数字在左边,下面的都比这个数字大,我们当前数字比较大,所以我们需要向左走,right控制向左,所以right - 1;放在左上角,向右向下都变大,不知道怎样行动,右下角也是同样的道理,放在左下角和我们现有方法其实差不多,所以也是可行的,但是不太符合我们的观察方式,我们最终选择从右上角开始,效率比较高。