题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题解
最笨的办法当然是按照顺序挨个搜索,如果数组无序的话,这也是唯一的办法,不过既然数组有序,就可以简单很多,一是可以通过每列的二分查找的方式搜索。不过更简单的是因为数组排列从左到右递增,从上到下递增。那每一列最左边的数就可以作为一个点,如果要搜索的数字比它小,就在上一列,如果比它大,就往右边找。所以,我们从左下角开始查找。
代码
<?php
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;
}
同理,也可以从右上角开始。