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+MSSQL分页的例子
Oct 09 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
Jun 26 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
关于laravel 子查询 &amp; join的使用
Oct 16 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 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 print类函数使用总结
2010/06/25 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
php实现分页显示
2015/11/03 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题
2007/01/09 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
JS简单验证上传文件类型的方法
2017/04/17 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
python datetime中strptime用法详解
2019/08/29 Python
Python类继承和多态原理解析
2020/02/05 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
Django缓存Cache使用详解
2020/11/30 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
Android interview questions
2016/12/25 面试题
门卫岗位安全职责
2013/12/13 职场文书
食堂标语大全
2014/06/11 职场文书
体育专业求职信
2014/07/16 职场文书
赔偿协议书范本
2014/09/12 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
python实现自动化群控的步骤
2021/04/11 Python
Python基础之常用库常用方法整理
2021/04/30 Python