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

题目

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

题解

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

代码



function 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;
}

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

你可能感兴趣的:(剑指OFFER,剑指OFFER-PHP实现)