• 面试题3:数组中重复的数字


    NowCoder

    第一种方式:改变数组结构

    <?php
    header("content-type:text/html;charset=utf-8");
    /*
     *数组中重复的数字 P39
     */
    function duplicate($numbers,&$duplication){
        //这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
        //函数返回True/False
        if($numbers  == null){
            return false;
        }
        for($i = 0;$i<count($numbers);$i++){
            while ($numbers[$i] != $i){
    
                if($numbers[$i] == $numbers[$numbers[$i]]){
                    $duplication[0] = $numbers[$i];
    
                    return true;
                }
                swap($numbers,$i,$numbers[$i]);//把交换放在审核是否相等后面
            }
    
        }
        return false;
    }
    
    function swap(&$arr,$i,$j){
        $temp = $arr[$i];
        $arr[$i] = $arr[$j];
        $arr[$j] = $temp;
    }
    
    $arr = array(2,2,3,0,4);
    duplicate($arr,$a);
    print_r($a);

    第二种方式:不改变数组结构

    <?php
    header("content-type:text/html;charset=utf-8");
    /*
     *数组中重复的数字(不打乱数组顺序) P41
     */
    function getDuplicate($numbers){
        if($numbers == null){
            return false;
        }
        $start = 1;
        $end = count($numbers)-1;
        while ($end >= $start){
            $mid = (($start + $end) >> 2) + $start;
            $count = getCount($numbers,$start,$mid);
            if($start == $end){
                if($count >1){
                    return $start;
                }
                else{
                    break;   //没有重复的值,退出循环
                }
            }
            if($count > $mid - $start +1){
                $end = $mid ;
            }
            else{
                $start = $mid +1;
            }
        }
        return false;
    }
    
    function getCount($numbers,$start,$end){
        if($numbers == null){
            return false;
        }
        $count = 0;
        for($i=0;$i<count($numbers)-1;$i++){
            if($numbers[$i] >= $start && $numbers[$i] <= $end){
                $count ++;
            }
        }
        return $count;
    }
    
    $arr = array(1,3,5,4,3,2,6,7);
    echo getDuplicate($arr);
  • 相关阅读:
    扫盲如何在ECLIPSE中使用条件断点
    春困
    气虚咳喘案
    知足老师论糖尿病
    辨痰之病位与寒热
    常用中药功效比较(任之堂)
    女子全身窜痛案
    小儿外感案
    紫斑案
    读任之堂中药讲记笔记
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10054347.html
Copyright © 2020-2023  润新知