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

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

发布时间:2020-05-25 03:10:05 所属栏目:PHP 来源:互联网
导读:统计一个数字在排序数组中出现的次数。1.有序的数组查找,使用二分法2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,end - start +1left=getLeft(data,k)right=getRight(data,k)retun right-left+1getLeft data,kleft=0right=arr.length-1mid=

<div class="cnblogs_code">

1.<span style="color: #000000">有序的数组查找,使用二分法
2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,<span style="color: #008080">end - start +1<span style="color: #000000">

left=getLeft(data,<span style="color: #000000">k)
right=getRight(data,<span style="color: #000000">k)
retun right-left+1<span style="color: #000000">

getLeft data,<span style="color: #000000">k
left=0<span style="color: #000000">
right=arr.length-1<span style="color: #000000">
mid=left+(right-left)/2
<span style="color: #0000ff">while left<=<span style="color: #000000">right
<span style="color: #0000ff">if arr[mid]<k <span style="color: #008000">//<span style="color: #008000">关键
left=mid+1
<span style="color: #0000ff">else<span style="color: #000000">
right=mid-1<span style="color: #000000">
mid=left+(right-left)/2
<span style="color: #0000ff">return<span style="color: #000000"> left
getRight data,<span style="color: #000000">k
left=0<span style="color: #000000">
right=arr.length-1<span style="color: #000000">
mid=left+(right-left)/2
<span style="color: #0000ff">while left<=<span style="color: #000000">right
<span style="color: #0000ff">if arr[mid]<=k <span style="color: #008000">//<span style="color: #008000">关键
left=mid+1
<span style="color: #0000ff">else<span style="color: #000000">
right=mid-1<span style="color: #000000">
mid=left+(right-left)/2
<span style="color: #0000ff">return right

{
<span style="color: #800080">$left=getLeft(<span style="color: #800080">$data,<span style="color: #800080">$k<span style="color: #000000">);
<span style="color: #800080">$right=getRight(<span style="color: #800080">$data,<span style="color: #800080">$k<span style="color: #000000">);
<span style="color: #0000ff">return <span style="color: #800080">$right-<span style="color: #800080">$left+1<span style="color: #000000">;
}
<span style="color: #0000ff">function getLeft(<span style="color: #800080">$arr,<span style="color: #800080">$k<span style="color: #000000">){
<span style="color: #800080">$left=0<span style="color: #000000">;
<span style="color: #800080">$right=<span style="color: #008080">count(<span style="color: #800080">$arr)-1<span style="color: #000000">;
<span style="color: #800080">$mid=<span style="color: #008080">intval(<span style="color: #800080">$left+(<span style="color: #800080">$right-<span style="color: #800080">$left)/2<span style="color: #000000">);
<span style="color: #0000ff">while(<span style="color: #800080">$left<=<span style="color: #800080">$right<span style="color: #000000">){
<span style="color: #0000ff">if(<span style="color: #800080">$arr[<span style="color: #800080">$mid]>=<span style="color: #800080">$k){<span style="color: #008000">//<span style="color: #008000">关键
<span style="color: #800080">$right=<span style="color: #800080">$mid-1<span style="color: #000000">;
}<span style="color: #0000ff">else<span style="color: #000000">{
<span style="color: #800080">$left=<span style="color: #800080">$mid+1<span style="color: #000000">;
}
<span style="color: #800080">$mid=<span style="color: #008080">intval(<span style="color: #800080">$left+(<span style="color: #800080">$right-<span style="color: #800080">$left)/2<span style="color: #000000">);
}
<span style="color: #0000ff">return <span style="color: #800080">$left<span style="color: #000000">;
}
<span style="color: #0000ff">function getRight(<span style="color: #800080">$arr,<span style="color: #800080">$k<span style="color: #000000">){
<span style="color: #800080">$left=0<span style="color: #000000">;
<span style="color: #800080">$right=<span style="color: #008080">count(<span style="color: #800080">$arr)-1<span style="color: #000000">;
<span style="color: #800080">$mid=<span style="color: #008080">intval(<span style="color: #800080">$left+(<span style="color: #800080">$right-<span style="color: #800080">$left)/2<span style="color: #000000">);
<span style="color: #0000ff">while(<span style="color: #800080">$left<=<span style="color: #800080">$right<span style="color: #000000">){
<span style="color: #0000ff">if(<span style="color: #800080">$arr[<span style="color: #800080">$mid]<=<span style="color: #800080">$k){<span style="color: #008000">//<span style="color: #008000">关键
<span style="color: #800080">$left=<span style="color: #800080">$mid+1<span style="color: #000000">;
}<span style="color: #0000ff">else<span style="color: #000000">{
<span style="color: #800080">$right=<span style="color: #800080">$mid-1<span style="color: #000000">;
}
<span style="color: #800080">$mid=<span style="color: #008080">intval(<span style="color: #800080">$left+(<span style="color: #800080">$right-<span style="color: #800080">$left)/2<span style="color: #000000">);
}
<span style="color: #0000ff">return <span style="color: #800080">$right<span style="color: #000000">;
}
<span style="color: #800080">$arr=<span style="color: #0000ff">array(1,2,3,4,5<span style="color: #000000">);
<span style="color: #800080">$m=GetNumberOfK(<span style="color: #800080">$arr,4<span style="color: #000000">);
<span style="color: #008080">var_dump(<span style="color: #800080">$m);

(编辑:安卓应用网)

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

    推荐文章
      热点阅读