首頁  >  文章  >  後端開發  >  php如何實現數組中出現次數超過一半的數字的統計方法(代碼)

php如何實現數組中出現次數超過一半的數字的統計方法(代碼)

不言
不言轉載
2018-10-13 14:58:262419瀏覽

這篇文章帶給大家的內容是關於php如何實現數組中出現次數超過一半的數字的統計方法(程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入長度為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中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除