剑指OFFER-二维数组中的查找

来源:互联网 发布:jdk源码有哪些值得买 编辑:程序博客网 时间:2024/05/16 18:47

题目

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

题解

最笨的办法当然是按照顺序挨个搜索,如果数组无序的话,这也是唯一的办法,不过既然数组有序,就可以简单很多,一是可以通过每列的二分查找的方式搜索。不过更简单的是因为数组排列从左到右递增,从上到下递增。那每一列最左边的数就可以作为一个点,如果要搜索的数字比它小,就在上一列,如果比它大,就往右边找。所以,我们从左下角开始查找。

代码

<?phpfunction Find($target, $array){    $y_len = count($array);    $x_len = count($array[0]);    for($i = $y_len-1, $j = 0; $i>=0&&$j<$x_len;){            if($target == $array[$i][$j]){                return true;            }elseif($target < $array[$i][$j]){                $i--;                continue;            }elseif($target > $array[$i][$j]){                $j++;                continue;            }        }    return false;}

同理,也可以从右上角开始。

0 0