//题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,
输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
/*第一种 将每一行看成递增数组 进行二分查找*/
function Find($target, $array)
{
//第一种解法:将每一行看成有序递增数组 进行二分查找
//获得行
$hang=count($array);
$lie=count($array[0]);
for($i=0;$i<$hang;$i++){//每行
$s=0;$h=$lie-1;
while($s<=$h){
$middle=(int)(($s+$h)/2);
if($target<$array[$i][$middle]){
$h=$middle-1;
}elseif($target>$array[$i][$middle]){
$s=$middle+1;
}else{
return true;
}
}
}
return false;
}
/*第二种 先变成一维数组 再进行顺序查找*/
function Find($target, $array)
{
//思路:先变成一维数组 再进行顺序查找
$res=[];
foreach($array as $k1=>$v1){
foreach($v1 as $k2=>$v2){
$res[]=$v2;
}
}
//对res进行顺序查找
$count=count($res);
for($i=0;$i<$count;$i++){
if($target==$res[$i]){
break;
}
}
if($i<$count){
return true;
}else{
return false;
}
}
/*第三种 左下角数组向上递减 向右递增 取左下角值与target进行比较 target小于左下角则向上移动 大于则向右移动*/
function Find($target, $array){
$hang=count($array)-1;
$lie=count($array[0])-1;
$zuoxia=$array[0][$hang-1];
$row=$hang;
$col=0;
while ( $row>=0 && $col <=$lie) {
if($target>$array[$row][$col]){
$col++;
}elseif ($target<$array[$row][$col]) {
$row--;
}else{
return true;
}
}
return false;
}