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

yipeiwu_com5年前PHP代码库

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

题目

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

题解

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

代码

<?php
function GetNumberOfK($data, $k)
{
  if(count($data)==0){
    return 0;
  }
  $index = 0;
  $low = 0;
  $high = count($data)-1;
  $middle = 0;
  //二分查找找到k的index
  while($low<=$high){
    $middle = ($high+$low)>>1;
    if($data[$middle]==$k){
      $index = $middle;
      break;
    }
    else if($data[$middle]>$k) {
      $high = $middle -1;
    }else{
      $low = $middle+1;
    }
    $index = -1;
  }
  // console.log(index);
  // 如果没找到
  if($index==-1){
    return 0;
  }
  //找到了 分别往左右查找边界
  $start = $index;
  $end = $index;
  $count = 0;
  while($data[$start]==$k){
    $count++;
    $start--;
  }
  while($data[$end]==$k){
    $count++;
    $end++;
  }
  return $count-1;
}

PS:这里再为大家推荐2款功能类似的统计工具(JS实现)供大家参考使用:

在线字数统计工具:
http://tools.jb51.net/code/zishutongji

在线字符统计与编辑工具:
http://tools.jb51.net/code/char_tongji

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php程序设计算法总结

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

相关文章

PHP使用mongoclient简单操作mongodb数据库示例

本文实例讲述了PHP使用mongoclient简单操作mongodb数据库。分享给大家供大家参考,具体如下: 最好回到《mongodb shell基础命令【进阶篇】》,再来看这里的内容,...

thinkphp查询,3.X 5.0方法(亲试可行)

一、介绍 ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取、更新和删除等操作,主要涉及到where方法等连贯操作即可,无论是采用什么数据库,你几...

Windows下XDebug 手工配置与使用说明

1. 下载XDebug二进制文件: http://www.xdebug.org/download.php   5.2 http://www.xdebug.org/files/php_xd...

标准PHP的AES加密算法类

分享一个标准PHP的AES加密算法类,其中mcrypt_get_block_size('rijndael-128', 'ecb');,如果在不明白原理的情况下比较容易搞错,可以通过mcr...

PHP获取访问页面HTTP状态码的实现代码

方法一 $header_info=get_headers('//www.jb51.net/'); echo $header_info[0]; //耗时 0.67~0.78 方法二...