2014-12-01 62 views
-3

我正在嘗試編寫一個程序,其中用戶給出了n個號碼,程序必須找出哪個號碼被重複的次數最多。 例如數字:4 5 5 1 3 1 1 7 1答案是1 我是一個初學者,所以這就是爲什麼大多數已經在網站上的答案不適合我。 我會非常感激。查找n個號碼的模式

+0

OMG,首先搜索StackOverflow:「C++查找模式」 – 2014-12-01 20:27:48

+1

要麼顯示您的代碼,並描述具體問題,否則將作爲http://stackoverflow.com/questions/9316352/how-do- i-find-the-mode-of-array – 2014-12-01 20:29:12

+0

@ThomasMatthews:這個問題詢問了一個排序後的數組,我調整了它的標題以反映它。 – 2014-12-01 20:41:33

回答

2

使用散列圖(unordered_map)來統計數字的出現次數,然後搜索散列表中的最大出現次數。

+1

這裏不需要哈希的開銷;一個'std :: map'就足夠了。 – cdhowie 2014-12-01 20:40:21

+0

使用std :: map將算法複雜度提高到O(n log n),而使用散列映射則爲O(n)。 n O(1)插入和一個O(n)搜索vs n O(log n)插入。你確定,插入std :: map比std :: unordered_map更快嗎? – midor 2014-12-01 20:45:38

0

我認爲你可以使用它將持有的元素{1,1,1,1,3,4,5,5,7} ,然後優先級隊列從隊列操作模式

0

你可能想要做的是將數字插入std::vector,使用std::sort
(在<algorithm>)上,並循環查看,以查看哪個數字出現次數最多。

爲了給你一個想法,你可以使用std::vector<int>::iterator而循環(使用auto代替)指向矢量的開頭+ 1,然後檢查是否到值迭代點是等於
iterator - 1。如果當前值爲更高最大值然後將其與其迭代器一起存儲。

希望能幫助你。