剑指 Offer 之 二维数组中的查找
Contents
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析
上面所描述的二维数组就是如下的数组:
|
|
如果我们想要在其中找到是否有7
这个数,可以这样做。
-
首先,我们选择右上角的数字
9
,发现9
大于7
,并且9
所在的这一列都是大于7
的。那么这一列我们就不要了,也就是让column--
即可。 -
然后,在选择右上角的数字
8
,和之前一样,8
也是大于7
,并且8
所在的这一列都是大于7
的,也让column--
。 -
其次,还是选择右上角的
2
,这时2
小于7
,我们就把2
所在的这一行去掉,即row++
。 -
接下来,选择右上角的
4
,同样的道理,执行row++
。 -
最后,选择右上角的
7
,发现相等,输出即可。
关键的步骤就是行与列的增加或减少,这里每次都选择右上角的数字。当然,选择左下角的数字道理是一样的,只不过,不能选择左上角和右下角的数字,因为这样看不出比7
大或者小的数字在哪一行或哪一列。
实现
|
|
详解
第3
行,对边界条件进行检查。第10
行,如果我们选择的右上角的数字 array[row][column]
比目标数字target
要小的话,就增加行数;如果我们选择的右上角的数字array[row][column]
比目标数字target
要大的话,就减小列数;否则就返回true,即找到这个数字。