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中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
PHP 遍历文件实现代码
May 04 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
WordPress中用于检索模版的相关PHP函数使用解析
Dec 15 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
laravel 时间格式转时间戳的例子
Oct 11 PHP
php pdo连接数据库操作示例
Nov 18 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
我的论坛源代码(四)
2006/10/09 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
为你总结一些php信息函数
2015/10/21 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
用 JSON 处理缓存
2007/04/27 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
js微信分享实现代码
2020/10/11 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
Python中的流程控制详解
2021/02/18 Python
幼儿园庆六一游园活动方案
2014/01/29 职场文书
入党个人总结范文
2015/03/02 职场文书