问题描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
问题分析:
关键信息:每一行、每一列都已排序
类似二分查找,但这里是二位数组,需要上下移动,或左右移动。
在移动时,需确保查找的数不在忽略区域
上左移:起始点为右下角,单纯比较数值大小,不能判断是需要上移还是左移,此移动不适合
上右移:起始点为左下角,数值判断较大时上移,数值判断较小时右移,此移动适合
下左移:起始点为右上角,数值判断较小时下移,数值判断较大时左移,此移动适合
下右移:起始点为左上角,单纯比较数值大小,不能判断是需要上移还是左移,此移动不适合
下面以下左移为例子:
代码:
def findNum(array, target):
rows = len(array) - 1
cols = len(array[0]) - 1
i = 0
j = cols
while i <= rows and j >= 0:
if target < array[i][j]:
j -= 1
elif target > array[i][j]:
i += 1
else:
return True,i,j
return False
testArray = [[1, 2, 3], [4, 5, 6]]
print(findNum(testArray, 4))
输出:(True, 1, 0)
更多内容分享,可关注wx公众号:程序猫TheCat