Algorithm 寻找经常出现的数字的最佳O(n)算法?

Algorithm 寻找经常出现的数字的最佳O(n)算法?,algorithm,data-structures,Algorithm,Data Structures,这是一个例子。每个数字都是一个值 在[0..k]之间的范围内。据说数字x经常出现在if中,至少是数字的1/3 数组中的值等于x 什么是O(n)算法来查找 当k的数量级大于n时,为什么不使用a,即从整数到整数的基于哈希的映射(字典)?然后迭代输入数组并计算计数器。在命令伪代码中: const int often = ceiling(n/3); hashmap m; for int i = 1 to n do { if m.contains(A[i]) m[A[i]] +=

这是一个例子。每个数字都是一个值 在[0..k]之间的范围内。据说数字x经常出现在if中,至少是数字的1/3 数组中的值等于x

什么是O(n)算法来查找 当k的数量级大于n时,为什么不使用a,即从整数到整数的基于哈希的映射(字典)?然后迭代输入数组并计算计数器。在命令伪代码中:

const int often = ceiling(n/3);
hashmap m;

for int i = 1 to n do {
    if m.contains(A[i])
       m[A[i]] += 1;
    else 
       m[A[i]] = 1;

    if m[A[i]] >= often
        // A[i] is appearing often
        // print it or store it in the result set, etc.
}
就时间(预期)和空间而言,这是
O(n)