【leetcode】- 矩阵查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整function Find($target, $array)
function Find($target, $array)
{
for($i = 0;$i<count($array);$i++){
for($j = 0;$j<count($array[$i]);$j++){
echo $target."==".$array[$i][$j];
if($target !== $array[$i][$j]){
continue;
}else{
return '存在';
}
}
}
}
上面算法是性能最差的。。。
下面思路:
可把这个数组想象成一个矩阵结构如下

可以看出矩阵四个角都可利用。比如先取出右上角与目标比较,因为数组是有序的,则右上角大于target则舍弃最后一列往左移动。如果右上角小于target,则舍弃一行,行往下移动。
具体代码如下:
//右上角比较
//行往下走,列往左走
function rightFind($target, $array){
$row = count($array);//行
$col = count($array[0]) - 1;//列 假设数组长度都相同
$i = 0; //从第一行右上角开始比较
while($i<$row && $col>=0){
//$array[$i][$col]为右上角数字,相等则返回true
if($array[$i][$col] == $target){
return true;
//如果$array[$i][$col]大于目标则列数往前移动
//$col--
}else if($array[$i][$col] > $target){
$col--;
//如果$array[$i][$col]小于目标则行数数往下移动
}else{
$i++;
}
}
return false;
}
/左下角比较
//行往上走减减 列往右走 加加
function leftFind($target,$array){
$row = count($array);//行
$col = count($array[0]) - 1;//列 假设数组长度都相同
$i = $row-1; //从最后一行开始往上减减
$j = 0; //列往右加加
while($i>0 && $j<=$col){
if($array[$i][$j] == $target){
return true;
}elseif($array[$i][$j] > $target){
//大于行往上走
$i--;
}else{
//列往右走
$j++;
}
}
return false;
}
浙公网安备 33010602011771号