找出向量中出现次数最多的数字

新手上路,请多包涵

我有一些数字存储在 std::vector<int> 中。我想找出向量中出现最多的数字。

例如在向量中

1 3 4 3 4 2 1 3 2 3

出现最多的元素是 3

是否有任何算法(STL或其他)可以做到这一点?

原文由 VaioIsBorn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
1 个回答

对它进行排序,然后遍历它并保留一个计数器,当当前数字与前一个数字相同时递增,否则重置为 0。还要跟踪到目前为止计数器的最高值是多少,以及达到该值时的当前数字是多少。这个解决方案是 O(n log n) (因为排序)。

或者,您可以使用从 int 到 int 的哈希图(或者如果您知道数字在有限范围内,您可以只使用数组)并遍历向量,将 the_hashmap[current_number] 每个数字增加 1。然后遍历 hashmap 以找到它的最大值(以及属于它的键)。不过,这需要一个 hashmap 数据结构(除非您可以使用更快的数组),这不是 STL 的一部分。

原文由 sepp2k 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏