求數組眾數的不同算法分析 [原]


對於絕對眾數(次數一定大於n/2), 可有最壞情況下O(n)的分治算法。

(數字兩兩比較,如果兩個數不同,則兩個數都丟棄;如果兩個數相同,則丟棄其中一個數。對剩下的數同樣處理,最后只剩一個數為眾數)

  

而對與一般的眾數問題,可有兩種方法:

一、修改快排:

1、取軸值x, 根據快排的過程,小於x的放在左邊,大於x的放在右邊。同時統計x的出現次數T。

2、如果X左邊的個數(不算X)多於T,向左遞歸;同理,如果X右邊的個數對於T,向右遞歸。

  

時間復雜度:O(nlgn)

  

二、利用數組統計。

如果已知原數組的范圍為[0...m], 則可以直接利用數組。

否則,需要用散列。

 

時間復雜度為O(n),但空間復雜度較高。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM