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 获取客户端的真实ip
Nov 30 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
10个实用的PHP代码片段
Sep 02 PHP
重新认识php array_merge函数
Aug 31 PHP
PHP图片处理之图片背景、画布操作
Nov 19 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
iOS10推送通知开发教程
Sep 19 PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
PHP获取类私有属性的3种方法
Sep 10 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中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
PHP安全上传图片的方法
2015/03/21 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
js中日期的加减法
2015/05/06 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
Python异常处理总结
2014/08/15 Python
python抓取百度首页的方法
2015/05/19 Python
Python中的下划线详解
2015/06/24 Python
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
python函数不定长参数使用方法解析
2019/12/14 Python
python模拟实现斗地主发牌
2020/01/07 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
如何教少儿学习Python编程
2020/07/10 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
电子专业推荐信范文
2013/11/18 职场文书
家长对小学生的评语
2014/01/28 职场文书
教师现实表现材料
2014/02/14 职场文书
三字经教学反思
2014/04/26 职场文书
综合实践活动总结
2014/05/05 职场文书
留守儿童工作方案
2014/06/02 职场文书
专科生就业求职信
2014/06/22 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
深入理解python多线程编程
2021/04/18 Python
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android