2014-12-01 38 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。如果当前值为更高最大值然后将其与其迭代器一起存储。

希望能帮助你。