剑指 offer 面试题3 二维数组中的查找

Algorithm Code

题目;在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路:写一个例子

1     2    8    9

2    4    9    12

4    7    10    13

6    8    11    15   

从上面的数字矩阵可以看出,每一行都是递增,每一列都是递增。比如我们要查找的数字为10, 以第0行 第3列数字9 为例,

(1) 9 < 10 ,因为9是第一行最大的数字,所以整个第一行都不会有要查找的数字10,从查找范围中删除第0行。

(2)接着看第1行第3列的数字12, 12  > 10, 因为每列都是递增的,所以第3列没有符合要求的数字,从查找范围中删除第3列。

(3)接着从第1行第2列数字9开始比较,9 < 10 所以第1行没有符合要求的数字,从查找范围中删除第1行。

(4)查找范围变为从第2行第2列开始, 数字为10 正好符合要求,查找结束

总结:数字矩阵右上角的数字,为一行的最大值,一列的最小值,与目标值进行比对,这样就可以直接从查找范围中删除一行或者一列,能够有效的缩小查找范围

代码如图1所示:

图1

你可能感兴趣的:(剑指 offer 面试题3 二维数组中的查找)