zoukankan      html  css  js  c++  java
  • 【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;
    
    }
    

      

  • 相关阅读:
    [原创]启发式测试策略模型
    [原创]SSH框架介绍
    [原创]Sniffer工具培训
    [原创]浅谈Devops理念
    [原创接口测试技术介绍
    一个让我看了之后,痛哭不止的舞蹈!寻找有同感的人!
    多一点宽容,少一点抱怨;多一点付出,少一点指责。
    笼屉与夹肉馍(的制作方法) 之于 三层与MVC
    找工作、跳槽之旅——前言
    【自然框架.视频】基础设置(一)如何下载自然框架
  • 原文地址:https://www.cnblogs.com/oceanL/p/8795271.html
Copyright © 2011-2022 走看看