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网站提速三大“软”招
Oct 09 PHP
MySQL GBK→UTF-8编码转换
May 24 PHP
判断是否为指定长度内字符串的php函数
Feb 16 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
基于Zend的Config机制的应用分析
May 02 PHP
CodeIgniter模板引擎使用实例
Jul 15 PHP
php实现根据字符串生成对应数组的方法
Sep 22 PHP
Yii2如何批量添加数据
May 17 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
PHP fclose函数用法总结
Feb 15 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 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下的权限算法的实现
2007/04/28 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
零基础学Python(一)Python环境安装
2014/08/20 Python
Python版微信红包分配算法
2015/05/04 Python
Python IDLE入门简介
2017/12/08 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
python动态进度条的实现代码
2019/07/03 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
求职教师自荐书
2014/06/19 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
win10更新失败无限重启解决方法
2022/04/19 数码科技
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python