频繁元素
从数据流中获取出现次数最多的三个元素
要求:空间复杂度为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;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115431.html