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
用mysql内存表来代替php session的类
Feb 01 PHP
PHP 在线翻译函数代码
May 07 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
Apr 12 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 01 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中调用JAVA
2006/10/09 PHP
功能齐全的PHP发送邮件类代码附详细说明
2008/07/10 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
ASP中用Join和Array,可以加快字符连接速度的代码
2007/08/22 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
大三毕业自我鉴定
2014/01/15 职场文书
人力资源求职信
2014/05/25 职场文书
超市收银员岗位职责
2015/04/07 职场文书
运动会观后感
2015/06/09 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang