牛客网-剑指offer 第一题(二维数组中的查找)

//题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,
输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
/*第一种  将每一行看成递增数组  进行二分查找*/
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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值