时间复杂度:O(n)
解题思路
既然数组从左到右升序,从上到下升序,那我们一定要好好利用这个特性。
我们可以以第一行最后一列为起点,通过向左和向下移动来找我们的目标元素。那么何时向左走,何时向下走呢?从该二维数组的性质我们知道,向左走元素会越来越小,向下走元素会越来越大,所以当我们遍历到的元素比目标元素大时,我们需要向左走去寻找更小的元素,同理当我们遍历到的元素比目标元素小时,我们需要向下走去寻找更大的元素。
这样我们最多走M+N步就完成了搜索过程,M为行数,N为列数。
AC代码
func searchMatrix(matrix [][]int, target int) bool {
i,j:=0,len(matrix[0])-1
for i<len(matrix)&&j>=0{
if matrix[i][j]==target{
return true
}else if matrix[i][j]<target{
i++//向下寻找更大的数
}else{
j--//向左寻找更小的数
}
}
return false
}
解题思路
总感觉该题特别特别熟悉,总感觉自己做过,但实在想不起来自己是在哪里做的了。不过大体的思路是正确的,走蛇形道就能完成目标元素的搜索。