這篇文章主要介紹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如何實現找出數組中出現次數超過數組長度一半的數字算法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。