当前位置:首页 > 日记 > 正文

PHP实现找出数组中出现次数超过数组长度一半的数字算法示例

PHP实现找出数组中出现次数超过数组长度一半的数字算法示例

本文实例讲述了PHP实现找出数组中出现次数超过数组长度一半的数字算法。分享给大家供大家参考,具体如下:

<?php* 算法要求:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。** 算法分析:我们需要计算数组中每个数字的出现次数。在PHP中我们可以使用in_array函数* 来判断一个元素是否出现在数组中。比如数组中含有1,2,3三个元素,我们要判断1是否存在* 可以使用in_array(1,$array)来判断,但是这样只能判断1出现了一次,因为对于含有数组* 元素1,2,3,1这样的数组来说,该函数只能判断1存在与数组中,而不能给出具体的出现次数。* 因为我们一次只能给它传递一个参数,我们判断了第一个1存在后,函数就返回了,为了能够继续* 判断后一个1,我们需要循环,让该函数多次执行。** 为此,我们需要一个原数组的拷贝。我们循环原数组,然后判断每一个元素是否存在于拷贝数组中。* 考虑数组array(1,2,3,1),以及拷贝数组array(1,2,3,1)。它们是完全一样的,当我们循环* 第一个数组时,先判断第一个1存在后,计数器自增,当循环到第二个1的时候,计数器再自增。这样* 我们就可以准确的判断每一个数组元素的出现次数。** 我们将数字和对应的出现次数,使用键 对的方式存储在数组中。比如array('1'=>2),表示,数字1出现* 了2次。** 下面的代码给出了具体实现过程。*/$array=array(1,1,3,1,1,14,1,1,4,6,7,1,1,21,33);//创建原数组$temp=$array;//得到原数组的一个拷贝$result=array();//初始化计数器数组foreach ($array as $value)//循环原数组{  if(in_array($value,$temp))//判断数字是否存在于拷贝数组中  {    if(isset($result[$value]))//判断该数字是否已经被计数过    {      $result[$value]=$result[$value]+1;      //如果已经出现过,计数器自增    } else    {      $result[$value]=1;      //如果没有,计数器初始化1    }  }}$len=count($array);//计算数组长度foreach ($result as $key=>$value)//循环计数器数组,这里的$key表示数字,$value表示出现次数{  if($value>($len/2))//如果一个数字的出现次数超过了数组长度的一半  {    echo '数组中共有元素'.$len.'个<br>';    echo $key.'出现了'.$value.'次,超过了数组长度的一半'.($len/2);    break;    //数组中只可能有一个数字的出现次数超过数组长度的一半  }}?>

运行结果:

数组中共有元素15个1出现了8次,超过了数组长度的一半7.5

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

相关文章

结合mint-ui移动端下拉加载实践方

结合mint-ui移动端下拉加载实践方

下拉加载,方法,移动端,电脑软件,mint,1.npm i mint-ui -S2.main.js中引入import 'mint-ui/lib/style.css'3.以下是代码结构部分:<template> <div class="main-body" :style="{'-webkit-overflow-scrolling': scrollMode}"> <v-loadm…

PHP 实现公历日期与农历日期的互转

PHP 实现公历日期与农历日期的互转

日期,转换,公历,农历,电脑软件,PHP 实现公历日期与农历日期的互转换前言: 今天根据客户的需求对时间进行了转换,就是客户要求增加农历日期的显示,在网上抄袭了一段,稍微修改了一下运行成功了,不难的,改动的很少的.示例代码:<?php /* * * 陈海波 …

一键系统重装要怎么操作?一键系统重

一键系统重装要怎么操作?一键系统重

系统重装,图文教程,操作,一键,电脑软件,  小编发现有好多朋友都不知道一键系统重装要怎么操作,其实一键重装系统的方法还是蛮简单的,如果大家想要学习一键重装系统的方法,小编可以教大家!下面就给大家带来一键系统重装图文教程,希望大家能够…

利用canvas中toDataURL | 将转为da

利用canvas中toDataURL | 将转为da

方法,详解,电脑软件,toDataURL,canvas,将图片转为base64的好处将图片转换为Base64编码,可以让你很方便地在没有上传文件的条件下将图片插入其它的网页、编辑器中。 这对于一些小的图片是极为方便的,因为你不需要再去寻找一个保存图片的地方。…

Windows 2003邮件服务器配置指南

Windows 2003邮件服务器配置指南

服务器配置,邮件,指南,电脑软件,Windows,邮件服务器的配置同样是企业网络管理中经常要进行的任务之一。与Web网站、FTP站点服务器一样,邮件服务器的配置方案也非常之多,但对于中小型企业说,利用网络操作系统自带的方式进行配置是最经济的。本…

IIS6架设网站常见问题及症状答疑

IIS6架设网站常见问题及症状答疑

网站,症状,常见问题,电脑软件, 很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的,做了很多次试验,结合以前的排错经验,做出了这个总结,希望能给大家帮上忙。 问题1:未启用父路径 症状举例: S…

完美解决Thinkphp3.2中插入相同数

完美解决Thinkphp3.2中插入相同数

数据,完美,电脑软件,问题描述今天在使用TP3.2插入数据的时候,为了避免插入相同的数据(所谓相同的数据,其主键相同或者是唯一索引的字段相同),我创建的索引如下图,主键索引为自增字段,不可能出现重复,即唯一索引可能会出现重复,我希望的是uid,year,mo…

红帽Linux忘记root密码的解决方法

红帽Linux忘记root密码的解决方法

解决方法,密码,红帽,电脑软件,root,在出现以下画面后按下键盘e键 (图1) 按下后会出现如下画面,在次按下e键,将会出现如图3所示的画面(图2)如图3所示,使用上下键将焦点移动到第2项,如果出现的和本图不一样,就找到有kerner字样的那一行,然后再次按下E键…

PS怎么设计珍珠字效果的字体?

PS怎么设计珍珠字效果的字体?

字体,效果,电脑软件,PS,用PS制作珍珠字的效果,做好之后图片看上去就像是用珍珠摆成的字一样。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、建立一个100*100的图象文件,用椭圆形选框工具画一个固定大…

angular中实现li或者某个元素点击

angular中实现li或者某个元素点击

方法,元素,两种,电脑软件,angular,本文介绍了angular中实现li或者某个元素点击变色的两种方法,分享给大家,希望对大家有帮助先说一种最直接了当的不需要js控制。方法一:直接在用ng-class就可以控制:<p ng-click="state=1;" ng-class="{activ…

ps怎么设计一个圆形的旅游图标?

ps怎么设计一个圆形的旅游图标?

图标,电脑软件,ps,ps中想要设计一个圆形的旅游图标,该怎么设计呢?下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、我们设计整个旅游图标为一个圆形的结构,先从天空开始设计…

javascript中神奇的 Date对象小结

javascript中神奇的 Date对象小结

对象,神奇,电脑软件,javascript,Date,Date 对象算是较常用的对象之一,但很多人完全不会操作,就算一些简单的操作也用 moment 而不自己尝试一下。本次分享下 Date 中的 date 使用技巧,希望能给大家启发。MDN官网介绍setDate() 方法根据本地时间…