• [PHP] 算法-统计一个数字在排序数组中出现的次数的PHP实现


    统计一个数字在排序数组中出现的次数。
    
    1.有序的数组查找,使用二分法
    2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,end - start +1
    
    left=getLeft(data,k)
    right=getRight(data,k)
    retun right-left+1
    
    getLeft data,k
        left=0
        right=arr.length-1
        mid=left+(right-left)/2
        while  left<=right
            if arr[mid]<k    //关键
                left=mid+1
            else
                right=mid-1
            mid=left+(right-left)/2
        return left
    getRight data,k
        left=0
        right=arr.length-1
        mid=left+(right-left)/2
        while  left<=right
            if arr[mid]<=k   //关键
                left=mid+1
            else
                right=mid-1
            mid=left+(right-left)/2
        return right
    <?php
    
    function GetNumberOfK($data, $k) 
    {
            $left=getLeft($data,$k);
            $right=getRight($data,$k);
            return $right-$left+1;
    }
    function getLeft($arr,$k){
            $left=0;
            $right=count($arr)-1;
            $mid=intval($left+($right-$left)/2);
            while($left<=$right){
                    if($arr[$mid]>=$k){//关键
                            $right=$mid-1;
                    }else{
                            $left=$mid+1;
                    }   
                    $mid=intval($left+($right-$left)/2);
            }   
            return $left;
    }
    function getRight($arr,$k){
            $left=0;
            $right=count($arr)-1;
            $mid=intval($left+($right-$left)/2);
            while($left<=$right){
                    if($arr[$mid]<=$k){//关键
                            $left=$mid+1;
                    }else{
                            $right=$mid-1;
                    }   
                    $mid=intval($left+($right-$left)/2);
            }   
            return $right;
    }
    $arr=array(1,2,3,4,4,4,5);
    $m=GetNumberOfK($arr,4);
    var_dump($m);
  • 相关阅读:
    uoj#207 共价大爷游长沙
    bzoj4006 [JLOI2015]管道连接
    bzoj2595 [Wc2008]游览计划
    uoj#300.【CTSC2017】吉夫特
    bzoj2565 最长双回文串
    bzoj2342 [Shoi2011]双倍回文
    bzoj3676 [Apio2014]回文串
    [转载]物理大神的八卦完整版——大爱物理
    低层次数论书籍大杂烩
    控制论课题
  • 原文地址:https://www.cnblogs.com/taoshihan/p/9683623.html
Copyright © 2020-2023  润新知