水王2
一、题目
随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
二、设计思路
这回的题目与上回很相似,我想能不能依旧使用相消的方法。最后,我发现如果一次消去四项完全不同的ID,最后剩下的必定是三个水王的ID.
三、代码
#include<iostream.h>
int main()
{
int ID[10]={1,2,2,2,3,3,3,4,4,4};
int ID_NULL;
int shui[3];
int flag[3];
int i;
shui[0]=shui[1]=shui[2]=0;
flag[0]=flag[1]=flag[2]=ID_NULL;
for(i=0;i<10;i++)
{
if(ID[i]==flag[0])
{
shui[0]++;
}
else if(ID[i]==flag[1])
{
shui[1]++;
}
else if(ID[i]==flag[2])
{
shui[2]++;
}
else if(shui[0]==0)
{
shui[0]=1;
flag[0]=ID[i];
}
else if(shui[1]==0)
{
shui[1]=1;
flag[1]=ID[i];
}
else if(shui[2]==0)
{
shui[2]=1;
flag[2]=ID[i];
}
else
{
shui[0]--;
shui[1]--;
shui[2]--;
}
}
cout<<"水王有:"<<endl;
cout<<flag[0]<<" "<<flag[1]<<" "<<flag[2]<<endl;
return 0;
}
四、截图
五、总结
这道题如果通过排序,那么1/4,2/4,3/4处即为水王ID,代码简单,但时间复杂度O(n*logn),会加大计算机的运算时间。
代码优化任重而道远。