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 相关文章推荐
example1.php
Oct 09 PHP
php批量删除数据
Jan 18 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
php文件上传的简单实例
Oct 19 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
PHP代码优化技巧小结
Sep 29 PHP
详解PHP实现执行定时任务
Dec 21 PHP
Laravel5.1自定义500错误页面示例
Oct 09 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
yii2多图上传组件的使用教程
May 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
11个PHP 分页脚本推荐
2011/08/15 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
php防注入及开发安全详细解析
2013/08/09 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
webpack入门必知必会
2017/01/16 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
python检测IP地址变化并触发事件
2018/12/26 Python
django之使用celery-把耗时程序放到celery里面执行的方法
2019/07/12 Python
python logging添加filter教程
2019/12/24 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
师德标兵事迹材料
2014/12/19 职场文书
中标通知书范本
2015/04/17 职场文书
不同意离婚答辩状
2015/05/22 职场文书
技术入股合作协议书
2016/03/21 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
MySQL派生表联表查询实战过程
2022/03/20 MySQL
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android