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 相关文章推荐
文章推荐系统(二)
Oct 09 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
yii操作cookie实例简介
Jul 09 PHP
linux下编译安装memcached服务
Aug 03 PHP
使用纯php代码实现页面伪静态的方法
Jul 25 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
Dec 17 PHP
Linux环境下php实现给网站截图的方法
May 03 PHP
CodeIgniter生成静态页的方法
May 17 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
PHP设计模式之命令模式示例详解
Dec 20 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/03/11 PHP
生成卡号php代码
2008/04/09 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
pyramid配置session的方法教程
2013/11/27 Python
答题辅助python代码实现
2018/01/16 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
Python列表(List)知识点总结
2019/02/18 Python
Django的Modelforms用法简介
2019/07/27 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
大学生自我鉴定
2013/12/16 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
单位租房协议范本
2014/12/03 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
超强台风观后感
2015/06/09 职场文书