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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
php全角字符转换为半角函数
Feb 07 PHP
初识php MVC
Sep 10 PHP
typecho插件编写教程(四):插件挂载
May 28 PHP
PHP获取某个月最大天数(最后一天)的方法
Jul 29 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 PHP
laravel5 Eloquent 实现事务方式
Oct 21 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 09 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
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
求职信格式范本
2013/11/15 职场文书
战友聚会邀请函
2014/01/18 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
国际会计专业求职信
2014/08/04 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
个人简历求职信范文
2015/03/20 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python
Redis三种集群模式详解
2021/10/05 Redis