c++ - 找出数组中出现次数最少的数

标签 c++ arrays c++11

我需要帮助找出数组中出现次数最少的元素。我想不出任何可靠的算法,C++ 库中是否定义了任何函数来执行此操作?

如果有你能想出的算法,请分享。不一定是代码,而是想法

“定义最少重复出现” - 假设数组 a[4] 包含 2,2,2,44 是最少出现的元素

最佳答案

为简洁起见使用了一些 C++14 特性,但很容易适应 C++11:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <unordered_map>

using namespace std;

template <typename I>
auto leastRecurring(I first, I last) {
    unordered_map<iterator_traits<I>::value_type, size_t> counts;
    for_each(first, last, [&counts](auto e) { ++counts[e]; });
    return min_element(begin(counts), end(counts), [](auto x, auto y) { return x.second < y.second; })->first;
}

int main() {
    const int a[] = {2, 2, 2, 3, 3, 4};
    cout << leastRecurring(begin(a), end(a)) << endl;
}

关于c++ - 找出数组中出现次数最少的数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22410323/

相关文章:

php - __在 PHP "Cannot use object of type stdClass as array"中获取资源

javascript - 如何将对象数组转换为在 typescript 中具有动态键的单个对象

c++ - 这段代码在 C++ 中合法吗

c++ - 读取数据文件并将每一列分配给单独的数组

c++ - 在编译时或静态分析期间强制执行 std::nothrow

arrays - 在 Matlab 中从单个值生成向量

c++ - zmq::proxy 示例不起作用 ()

c++ - 获取模板可调用对象的参数类型

c++ - 获取除第一个元素以外的所有元素作为单独的 vector

c++ - 从image.ppm c++创建视频