對於絕對眾數(次數一定大於n/2), 可有最壞情況下O(n)的分治算法。
(數字兩兩比較,如果兩個數不同,則兩個數都丟棄;如果兩個數相同,則丟棄其中一個數。對剩下的數同樣處理,最后只剩一個數為眾數)
而對與一般的眾數問題,可有兩種方法:
一、修改快排:
1、取軸值x, 根據快排的過程,小於x的放在左邊,大於x的放在右邊。同時統計x的出現次數T。
2、如果X左邊的個數(不算X)多於T,向左遞歸;同理,如果X右邊的個數對於T,向右遞歸。
時間復雜度:O(nlgn)
二、利用數組統計。
如果已知原數組的范圍為[0...m], 則可以直接利用數組。
否則,需要用散列。
時間復雜度為O(n),但空間復雜度較高。