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执行速度全攻略(下)
Oct 09 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
php中hashtable实现示例分享
Feb 13 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
PHP入门教程之数学运算技巧总结
Sep 11 PHP
PHP实现的各类hash算法长度及性能测试实例
Aug 27 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 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
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
Python中使用中文的方法
2011/02/19 Python
Python发送email的3种方法
2015/04/28 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
Python实现TCP通信的示例代码
2019/09/09 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
HTML5标签小集
2011/08/02 HTML / CSS
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
迷你西餐厅创业计划书范文
2013/12/31 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
放假通知
2015/04/14 职场文书
绿里奇迹观后感
2015/06/15 职场文书
社区服务活动感想
2015/08/11 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书