题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
根据数组的规律:从上到下递增,从左到右递增。观察左下角到右上角的对角线,下面的比上面的小,左边比右面小。可以左下角开始沿着对角线查找,根据大小需要调整坐标位置,越界表示不存在。
第一次这样写,并且下面不是用的独立的if,而是if elseif判断,用elseif会造成不断的在一个圈内循环的情况出现,因为每次只移动一步,根据大小调整横纵坐标,但是很可能移动了多次又回到了原点。所以用独立的if解决这个问题。
function Find($target, $array)
{
// write code here
$rows = count($array);
$cols = count($array[0]);
for($i=0,$j=$rows-1;$i<$cols&&$j>=0;){
if($array[$j][$i]>$target){
$j--;
}
if($array[$j][$i]<$target){
$i++;
}
if ($target==$array[$j][$i]){
return true;
}
}
return false;
}
这个只是把判断条件向前面提了,因为如果不进入循环就判断就可能造成i,j的值为负数造成数组越界,当然也可以用其他方式处理
function Find($target, $array)
{
// write code here
$rows = count($array);
$cols = count($array[0]);
for($i=0,$j=$rows-1;$i<$cols&&$j>=0;){
if ($target==$array[$j][$i]){
return true;
}
if($array[$j][$i]>$target){
$j--;
}
if($array[$j][$i]<$target){
$i++;
}
}
return false;
}