频繁元素
从数据流中获取出现次数最多的三个元素
要求:空间复杂度为O(k)
算法过程:设计一个容量大小为8的数组,来数,计数加一,如果满了,没有重复均减一。最后数组中多的三个数。
int k[8], count[8], t;
for (int i = 0; i < 10; i++)
{
count[i] = 0;
k[i] = 0;
}
while (!env.done())
{
t = env.get_data();
for (int i = 0; i < 8; i++)
{
if (k[i] == 0)
{
k[i] = t;
count[i]++;
break;
}
if (t == k[i])
{
count[i]++;
break;
}
if (i == 7)
{
for (int m = 0; m < 8; m++)
{
if (count[m] > 0)
count[m]--;
if (count[m] == 0)
k[m] == 0;
}
}
}
}
for (int i = 0; i < 8; i++)
{
if (k[i] != 0)
cout << k[i] << " " << count[i] << endl;
}
return 0;
}
};
结果: