服务器之家

服务器之家 > 正文

PHP实现统计一个数字在排序数组中出现次数的方法

时间:2019-10-26 14:57     来源/作者:重口味AC

本文实例讲述了PHP实现统计一个数字在排序数组中出现次数的方法。分享给大家供大家参考,具体如下:

题目

统计一个数字在排序数组中出现的次数。

题解

既然是排序数组,使用二分查找是效率最高的。找到之后再向两侧拓展一下。

代码

  1. <?php 
  2. function GetNumberOfK($data$k
  3.   if(count($data)==0){ 
  4.     return 0; 
  5.   } 
  6.   $index = 0; 
  7.   $low = 0; 
  8.   $high = count($data)-1; 
  9.   $middle = 0; 
  10.   //二分查找找到k的index 
  11.   while($low<=$high){ 
  12.     $middle = ($high+$low)>>1; 
  13.     if($data[$middle]==$k){ 
  14.       $index = $middle
  15.       break
  16.     } 
  17.     else if($data[$middle]>$k) { 
  18.       $high = $middle -1; 
  19.     }else
  20.       $low = $middle+1; 
  21.     } 
  22.     $index = -1; 
  23.   } 
  24.   // console.log(index); 
  25.   // 如果没找到 
  26.   if($index==-1){ 
  27.     return 0; 
  28.   } 
  29.   //找到了 分别往左右查找边界 
  30.   $start = $index
  31.   $end = $index
  32.   $count = 0; 
  33.   while($data[$start]==$k){ 
  34.     $count++; 
  35.     $start--; 
  36.   } 
  37.   while($data[$end]==$k){ 
  38.     $count++; 
  39.     $end++; 
  40.   } 
  41.   return $count-1; 

希望本文所述对大家PHP程序设计有所帮助。

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字 2019-06-05
返回顶部