Algorithm 寻找经常出现的数字的最佳O(n)算法?
这是一个例子。每个数字都是一个值 在[0..k]之间的范围内。据说数字x经常出现在if中,至少是数字的1/3 数组中的值等于x 什么是O(n)算法来查找 当k的数量级大于n时,为什么不使用a,即从整数到整数的基于哈希的映射(字典)?然后迭代输入数组并计算计数器。在命令伪代码中: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]] +=
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)