PHP面试题目

29个成员

查找数组里相差最大值的两项

发表于 2015-12-08 1465 次查看

目前有一数组$data = array('200','45','7','','678','567','34','56','89','11','890'); 

写一个算法,返回数组中相差最大的两项,并且相差的值是多少。

 

补充,做完前面的同学可以再做下查找数组中相差最小的两项,并且相差的值是多少。

13回复
  • 2楼 福娃 2015-12-08

    天使的翅膀(1184647618)  9:55:00


    <?php
    $data = array(200,45,7,56,98,58,79);
    $yu='';
    $ty=$data[0];
    foreach ($data as $key => $v) {
    if($v>$yu){
          $yu = $v ;
    }
    if($v<$ty){
    $ty = $v ;
    }
    }
    echo $max = $yu;
    echo ' <br/>';
    echo $min = $ty;
    echo ' <br/>';
    echo $ti = $max-$min;

    ?>

  • 3楼 阿磊 2015-12-08

    <?php
    $data = array('200','45','7','1','678','567','34','56','89','11','890');
    $max='';
    $min=$data[0];
    foreach($data as $k=>$v){
     if($v>$max){
      $max=$v;
     }
      
     if($v<$min){
      $min=$v;
     }
      
    }
    echo "最大值为".$max.'<br>';

    echo "最小值为".$min.'<br>';

    echo "求差为".($max-$min);

  • 4楼 井底之蛙 2015-12-08

    <?php
    header("content-type:text/html;charset=utf-8");
    $data = array('200','45','7','','678','567','34','56','89','11','890');
    // 最大差的两个数
    function max_cha($arr){
    asort($arr);
    sort($arr);
    $res=$arr[(count($arr)-1)]-$arr[0];                       
    echo '</br>'.$res."=".$arr[(count($arr)-1)]."-".$arr[0];   
    }
    max_cha($data);                                           //890=890-
    //最少差的两个数
    function min_cha($arr){
        asort($arr);
        sort($arr);
        for($i=0;$i<(count($arr)-2);$i++){
            $res[]=$arr[($i+1)]-$arr[$i];
        }
        asort($res);
        foreach($res as $key => $value){
            $a[]=$key;
        }
        $over=$arr[($a[0]+1)]-$arr[$a[0]];
        echo '</br>'.$over."=".$arr[$a[0]+1]."-".$arr[($a[0])];
    }
    min_cha($data);                                             //4=11-7
    ?>

     

  • 5楼 阿磊 2015-12-08

    经过思考,借鉴了网上别人写的函数,真漂亮,学习了

    <?php
         function maxMin( $arr) {
             $cmpTime = 0;
             $count = count($arr);
             $big = $small = $arr[0];
             for($i = 1; $i < $count; $i++) {
                 $cmpTime++;
                 if($big > $arr[$i]) {//判断$arr[$i]最小值
                     $cmpTime++;
                     if($small > $arr[$i]) {
                         $small = $arr[$i];//判断后$samll最小的就是$arr[$i]
                     }
                 } else {
                     $big = $arr[$i];//得到最大值
                 }
             }
            
             echo "ArrLeng: " . $count . "<br>";
             echo "CmpTime: " . $cmpTime . "<br>";
             echo "Big: " . $big . "<br>";
             echo "Small: " . $small . "<br>";
             echo "求差:".($big-$small)."<br>";
         }
        
        $data = array('200','45','7','1','678','567','34','56','89','11','890');
         maxMin($data);
     ?>

     

  • 6楼 福娃 2015-12-08

    $data = array('200','45','7','','678','567','34','56','89','11','890');
    //最大差值
    function max_min($gongshi,$data){
      eval($gongshi);
      while(!is_numeric($x)){
           unset($data[array_search($x,$data)]);
           eval($gongshi);
      }
        return $x;
    }
    $max=max_min("\$x=max(\$data);",$data);
    $min=max_min("\$x=min(\$data);",$data);
    echo "<br>最大差值为:".($max-$min)." = {$max} - {$min}";

     

     

    //最小差值
    sort($data);
    $data2=array();
    foreach($data as $v){
         if(!is_numeric($v) ) continue;
         $data2[]=$v;
    }
    $a=$max-$min;
    $b=0;
    foreach($data2 as $k=>$v){
         if(!$data2[$k+1]) break;
         $c=$data2[$k+1]-$v;
         if($c < $a){
              $a=$c;
              $b=$k;
         }
    }
    echo "<br>最小差值为:{$a} = ".$data2[$b+1]." - ".$data2[$b]."<br>";

  • 7楼 蓝天白云 2015-12-08

    <?php
    $data = array(200,45,7,56,98,58,79,'');
    $yu='';
    $ty=$data[0];
    foreach ($data as $key => $v) {
        if($v != ''){
            if($v>$yu){
              $yu = $v ;
            }
            if($v<$ty){
                $ty = $v ;
            }
        }
    }
    echo $max = $yu;
    echo ' <br/>';
    echo $min = $ty;
    echo ' <br/>';
    echo $ti = $max-$min;

     

    echo ' <br/><h1>求两者最小</h1>';
    $data1 = array(200,45,7,56,98,58,79,'');
    if(in_array('',$data)){
        unset($data[array_search('', $data)+1]);
    }
    sort($data1);
    $yu1=$data1[0];
    $yu2=$data1[1];
    $yu3= $data1[1]-$data1[0];
    for($v=2;$v<count($data1)-1;$v++){
        if($v!=count($data1)-1){
            if($yu3>($data1[$v]-$data1[$v-1])){
                $yu3=$data1[$v]-$data1[$v-1];
                $yu1=$data1[$v-1];
                $yu2=$data1[$v];    
            }
        }
    }
    echo $yu3;
    echo '</br>';
    echo $yu1.'</br>'.$yu2;
    ?>

  • 8楼 朕扮皇 2015-12-08

    <?php
    $data = array('200','45','7','','678','567','34','56','89','11','890');
    $max='';
    foreach ($data as $v){
        if($v>$max){
            $max = $v;
        }
    }
    foreach ($data as $v){
        if($v<$min){
            $min = $v;
        }
    }
    if($min == ''){
        $min = 0;
    }
    echo $max."<br/>";
    echo $min."<br/>";
    echo $max-$min;
    ?> 

    • 朕扮皇 2015-12-08
      最简便方法 $max = max($data); $min = min($data); $diff = $max-$min; if($min==''){ $min = 0; }
    • 朕扮皇 2015-12-08
      用排序函数 sort($data); $num = count($data); $diff = $data[$num-1] - $data[0];
  • 9楼 zzliux 2015-12-08

    <?php
    $data = array('200','45','7','','678','567','34','56','89','11','890'); 
    var_dump(fun($data));
    function fun($a = array()){
        $subL = 0; $subR =1;
        $indexMax = $indexMin = 0;
        foreach ($a as $k1 => $v1) {
            if($v1 < $a[$indexMin]) $indexMin = $k1;
            if($v1 > $a[$indexMax]) $indexMax = $k1;
            for($k2 = 0; $k2<$k1; $k2++){
                if(abs($a[$k1]-$a[$k2])<abs($a[$subL]-$a[$subR])){
                    $subL = $k1;
                    $subR = $k2;
                }
            }
        }
        $res = array(
            'subMax' => array(
                'indexL' => $indexMax,
                'indexR' => $indexMin,
                'sub'     => $a[$indexMax] - $a[$indexMin]
            ),
            'subMin' => array(
                'indexL' => $subL,
                'indexR' => $subR,
                'subAbs' => abs($a[$subL] - $a[$subR])
            )
        );
        return $res;
    }

     

  • 10楼 祝你好运 2015-12-08

    $data = array('200','45','7','','678','567','34','56','89','11','890'); 

    function cha($data){    
         sort($data);
         $sum=count($data);
         echo '最小值是'.$data[0]."<br/>";
         echo '最大值是'.$data[$sum-1]."<br/>";
         echo '最大值和最小值相差:'.$data[$sum-1]-$data[0]."<br/>";}

  • 11楼 祝你好运 2015-12-08

    $data = array('200','45','7','','678','567','34','56','89','11','890'); 

    function cha($data){    
         sort($data);
         $sum=count($data);
         echo '最小值是'.$data[0]."<br/>";
         echo '最大值是'.$data[$sum-1]."<br/>";
         echo '最大值和最小值相差:'.$data[$sum-1]-$data[0]."<br/>";}
         
    //***********相差最小的两项
    }
    function nan(){//nan(难) 很难;得用递归,没时间了。还没想出来

        

     

     

    }

    cha($data);

发表回复
你还没有登录,请先登录注册

加入我们吧,一起学习QQ群516033298