php实现数组中出现次数超过一半的数字的统计方法


Posted in PHP onOctober 14, 2018

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

两种方式:

1、定义一个新数组arr,遍历数组给arr赋值,arr[元素]=出现的次数
2.排序下arr,取第一个的key和value,key是目标元素,value是出现次数,验证下后返回
3.时间复杂度是O(n) 空间上会新创建个数组

1、定义变量e代表出现次数最多的元素,变量count用于判断出现次数用
2.遍历数组,当前元素与e比较,相同的count++,不同的count--,count为0时当前元素覆盖e
3.遍历数组验证e所出现的次数有没有超过一半
4.时间复杂度O(n) 空间复杂度O(n)

e,count=1

for i=1;i<arr.length;i++

  if arr[i]==e

    count++

  else

    count--

  if count==0

    e=arr[i]

    count=1

count=0

for i=0;i<arr.length;i++

  if arr[i]==e

    count++

if count*2>arr.length

  return e
<?php

$arr=array(1,2,3,2,2,2,5,4,2);

$e=MoreThanHalfNum_Solution($arr);

var_dump($e);

 

function MoreThanHalfNum_Solution($numbers){

    $arr=$numbers;

    $e=$arr[0];

    $count=1;

    $length=count($arr);

    for($i=1;$i<$length;$i++){

        if($arr[$i]==$e){

            $count++;

        }else{

            $count--;

        }  

 

        if($count==0){

            $e=$arr[$i];

            $count=1;

        }  

    }  

    $count=0;

    for($i=0;$i<$length;$i++){

        if($arr[$i]==$e){

            $count++;

        }  

    }  

    if($count*2>$length){

        return $e; 

    }  

    return 0;

 

}

以上就是本次的全部内容和代码,感谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP求小于1000的所有水仙花数的代码
Jan 10 PHP
PHP的curl实现get,post和cookie(实例介绍)
Jun 17 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 PHP
非常经典的PHP文件上传类分享
May 15 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
May 17 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 #PHP
PHP中常见的密码处理方式和建议总结
Oct 14 #PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 #PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 #PHP
PHP按一定比例压缩图片的方法
Oct 12 #PHP
PHP实现图片压缩
Sep 09 #PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 #PHP
You might like
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
页面使用密码保护代码
2013/04/10 Javascript
JS与C#编码解码
2013/12/03 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
预备党员的自我评价
2014/03/12 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
关于诚信的活动方案
2014/08/18 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
图文详解nginx日志切割的实现
2022/01/18 Servers