本文實例講述了PHP實現(xiàn)找出數(shù)組中出現(xiàn)次數(shù)超過數(shù)組長度一半的數(shù)字算法。分享給大家供大家參考,具體如下:
<?php * 算法要求:數(shù)組中有一個數(shù)字出現(xiàn)的次數(shù)超過了數(shù)組長度的一半,找出這個數(shù)字。 * * 算法分析:我們需要計算數(shù)組中每個數(shù)字的出現(xiàn)次數(shù)。在PHP中我們可以使用in_array函數(shù) * 來判斷一個元素是否出現(xiàn)在數(shù)組中。比如數(shù)組中含有1,2,3三個元素,我們要判斷1是否存在 * 可以使用in_array(1,$array)來判斷,但是這樣只能判斷1出現(xiàn)了一次,因為對于含有數(shù)組 * 元素1,2,3,1這樣的數(shù)組來說,該函數(shù)只能判斷1存在與數(shù)組中,而不能給出具體的出現(xiàn)次數(shù)。 * 因為我們一次只能給它傳遞一個參數(shù),我們判斷了第一個1存在后,函數(shù)就返回了,為了能夠繼續(xù) * 判斷后一個1,我們需要循環(huán),讓該函數(shù)多次執(zhí)行。 * * 為此,我們需要一個原數(shù)組的拷貝。我們循環(huán)原數(shù)組,然后判斷每一個元素是否存在于拷貝數(shù)組中。 * 考慮數(shù)組array(1,2,3,1),以及拷貝數(shù)組array(1,2,3,1)。它們是完全一樣的,當我們循環(huán) * 第一個數(shù)組時,先判斷第一個1存在后,計數(shù)器自增,當循環(huán)到第二個1的時候,計數(shù)器再自增。這樣 * 我們就可以準確的判斷每一個數(shù)組元素的出現(xiàn)次數(shù)。 * * 我們將數(shù)字和對應的出現(xiàn)次數(shù),使用鍵 對的方式存儲在數(shù)組中。比如array('1'=>2),表示,數(shù)字1出現(xiàn) * 了2次。 * * 下面的代碼給出了具體實現(xiàn)過程。 */ $array=array(1,1,3,1,1,14,1,1,4,6,7,1,1,21,33); //創(chuàng)建原數(shù)組 $temp=$array; //得到原數(shù)組的一個拷貝 $result=array(); //初始化計數(shù)器數(shù)組 foreach ($array as $value)//循環(huán)原數(shù)組 { if(in_array($value,$temp))//判斷數(shù)字是否存在于拷貝數(shù)組中 { if(isset($result[$value]))//判斷該數(shù)字是否已經(jīng)被計數(shù)過 { $result[$value]=$result[$value]+1; //如果已經(jīng)出現(xiàn)過,計數(shù)器自增 } else { $result[$value]=1; //如果沒有,計數(shù)器初始化1 } } } $len=count($array); //計算數(shù)組長度 foreach ($result as $key=>$value)//循環(huán)計數(shù)器數(shù)組,這里的$key表示數(shù)字,$value表示出現(xiàn)次數(shù) { if($value>($len/2))//如果一個數(shù)字的出現(xiàn)次數(shù)超過了數(shù)組長度的一半 { echo '數(shù)組中共有元素'.$len.'個<br>'; echo $key.'出現(xiàn)了'.$value.'次,超過了數(shù)組長度的一半'.($len/2); break; //數(shù)組中只可能有一個數(shù)字的出現(xiàn)次數(shù)超過數(shù)組長度的一半 } } ?>
運行結(jié)果:
數(shù)組中共有元素15個 1出現(xiàn)了8次,超過了數(shù)組長度的一半7.5
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《PHP數(shù)學運算技巧總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
【網(wǎng)站聲明】本站除付費源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學習交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。