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利用COM对象访问SQLServer、Access
Oct 09 PHP
从网上搜到的phpwind 0day的代码
Dec 07 PHP
php自动跳转中英文页面
Jul 29 PHP
Session保存到数据库的php类分享
Oct 24 PHP
基于Linux调试工具strace与gdb的常用命令总结
Jun 03 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 PHP
详细解读php的命名空间(二)
Feb 21 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 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 Array交叉表实现代码
2010/08/05 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
php实现留言板功能
2017/03/05 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
python中实现定制类的特殊方法总结
2014/09/28 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
python输入中文的实例方法
2020/09/14 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
Linux内核产生并发的原因
2016/11/08 面试题
销售职业生涯规划范文
2014/03/14 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python