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

博客 www.51msk.cn

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

  

php如何实现统计一个数字在排序数组中出现的次数(代码)的更多相关文章

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

    统计一个数字在排序数组中出现的次数. 1.有序的数组查找,使用二分法 2.二分法查找第一次出现的位置,二分法查找最后一次出现的位置,end - start +1 left=getLeft(data,k ...

  2. 【c语言】统计一个数字在排序数组中出现的次数

    // 题目:统计一个数字在排序数组中出现的次数. //  比如:排序数组{1.2,3,3,3,3,4.5}和数字3,因为3出现了4次.因此输出4 有一种最简单的算法,遍历.可是有比它效率更高的 先看遍 ...

  3. 剑指offer37:统计一个数字在排序数组中出现的次数

    1 题目描述 统计一个数字在排序数组中出现的次数. 2 思路和方法 (1)查找有序数组,首先考虑使用二分查找,使时间复杂度为O(log n).更改二分查找的条件,不断缩小区间,直到区间头和区间尾均为k ...

  4. 编程算法 - 数字在排序数组中出现的次数 代码(C)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/36869869 数字在排序数组中出现的次数 代 ...

  5. 【C语言】统计数字在排序数组中出现的次数

    //数字在排序数组中出现的次数. //统计一个数字在排序数组中出现的次数.比如:排序数组{1,2,3,3,3,3,4,5}和数字3,因为3出现了4次,因此输出4. #include <stdio ...

  6. 剑指Offer面试题:32.数字在排序数组中出现的次数

    一.题目:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 二.解题思路 2 ...

  7. 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找

    题目地址:http://ac.jobdu.com/problem.php?pid=1349 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数 ...

  8. 剑指offer: 38 数字在排序数组中出现的次数

    题目描述 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5} 和数字3,输出4. 思路如下 1. 预估时间复杂度,最复杂情况是,顺序扫描,统计K出现的次数,时间复杂 ...

  9. 【剑指offer】面试题38:数字在排序数组中出现的次数

    题目: 统计一个数字在排序数组中出现的次数. 思路: 对二分查找进行改进,找到数字在数组中第一次出现和最后一次出现的位置,这样就得到它出现的次数. 以找第一次出现的位置为例:如果mid元素大于k,则在 ...

随机推荐

  1. Flink1.4.0中反序列化及序列化类变化

    Flink1.4.0中,反序列化及序列化时继承的类,有一些被标记为了“@deprecated”,路径上也有变化: 1.AbstractDeserializationSchema 以前路径 org.ap ...

  2. 自定义RatingBar评分控件

    1.介绍 实现类似美团外卖评分供能,系统提供了RatingBar,今天来自定义一波,当做自定义view的一个学习,效果如下,能够滑动或者点击变化星星数量 2.自定义属性 在values目录下的attr ...

  3. 程序控制结构及for循环、foreach循环、迭代器

    结构化程序设计 三种基本控制结构:顺序结构.选择结构.循环结构. 在这种思想的指导下,发展出了面向过程编程方式.面向过程编程的核心是算法+数据结构.算法可以用顺序.选择.循环这三种基本控制结构来实现. ...

  4. Jquery异步 Deferred Object

    Deferred Object )); return dtd.promise();};//使用$.when()为普通操作添加回调函数 为多个操作指定回调函数//$.when(deferred, def ...

  5. MYSQL 5.7 sqlmode 行为

    最近碰到了sql_mode 的一些问题,故进行了研究,根据实际情况研究其行为. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ER ...

  6. JBoss服务器优化

    JBOSS参数调优 配置deploy/jboss-web.deployer/server.xml文件 . <Connector port="8080" address=&qu ...

  7. Linux 用户和用户组详解

    用户分类 超级用户:UID范围 0 root用户:uid=0(root) gid=0(root) groups=0(root) 普通用户:由管理员创建,UID范围(500-65535) --> ...

  8. hibernate连接mysql,查询条件中有中文时,查询结果没有记录,而数据库有符合条件的记录(解决方法)

    今天在另一台服务器上重新部署了网站,结果出现了以下问题: ——用hibernate做mysql的数据库连接时,当查询条件中有中文的时候,查询结果没有记录,而数据库中是存在符合条件的记录的. 测试了以下 ...

  9. Linux--安全加固02

    目录:1.BIOS2.SSH安全3.禁用telnet4.禁用代码编译5.ProFTP6.TCPwrappers7.创建一个SU组8.root通知9.history安全10.欢迎信息11.禁用所有特殊账 ...

  10. Git操作(基础篇)

    Git操作(基础篇) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/.Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常 ...