二维数组查找——剑指offer经典面试题
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组array[m][n]和一个整数k,判断数组中是否含有该整数。
解题思路
比较最右边一列第一个元素array[max][0]与目标数字k大小,存在以下三种情况:
(1) array[max][0]=k 查找到目标数字,返回True
(2) array[max][0]>k 该列最小元素比k大,排除最右列元素
(3) array[max][0]<k 目标数字在该元素的左下方的新数组中,更新数组,再次进行以上过程
代码实现(python3.6.5)
def Find(target, array):
h=len(array)
w=len(array[0])
hi=0
wi=w-1
while hi<h and wi>0:
if array[hi][wi]==target:
return True
elif array[hi][wi]>target:
wi=wi-1
else:
hi=hi+1
return False
a=[[1, 5, 8, 11],
[3, 7, 9, 12],
[6, 12,13,15],
[14,16,17,19]]
print(Find(10,a))
print(Find(13,a))