加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php获取一个数字在排序数组中出现的次数

发布时间:2020-05-30 19:32:59 所属栏目: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]

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

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,5);

$m=GetNumberOfK($arr,4);

var_dump($m);

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读