[PHP] 算法-统计一个数字在排序数组中出现的次数的PHP实现
程序员文章站
2023-12-01 22:25:52
统计一个数字在排序数组中出现的次数。 1.有序的数组查找,使用二分法 2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,end - start +1 left=getLeft(data,k) right=getRight(data,k) retun right-left+1 getLef... ......
统计一个数字在排序数组中出现的次数。 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);
上一篇: 从零学习node.js之模块规范(一)
下一篇: VUE基于NUXT的SSR 服务端渲染
推荐阅读
-
[PHP] 算法-统计一个数字在排序数组中出现的次数的PHP实现
-
PHP查找数组中只出现一次的数字实现方法【查找特定元素】
-
PHP实现找出数组中出现次数超过数组长度一半的数字算法示例
-
PHP实现统计一个数字在排序数组中出现次数的方法
-
PHP实现统计所有字符在字符串中出现次数的方法
-
[PHP] 算法-数组中出现次数超过一半的数字的PHP实现
-
[PHP] 算法-数组重复数字统计的PHP实现
-
php实现数组中出现次数超过一半的数字的统计方法
-
在一个非降序排列的数组中,找出数字target出现的次数问题解答
-
PHP-算法[给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标]