编程之美中寻找发帖“水王”一节的扩展问题:随着Tango的发展,管理员发现“超级水王”没有了。统计结果表明,有3个发帖很多的ID,他们的发帖数目都超过了帖子总数目N的1/4。问如何从发帖ID列表中快速找到他们的ID?具体的代码实现如下(思想和原问题相同):
int *findID(int *ID,int n)
{
int candidate[3];
int nTimes[3]={0};
for(int i=0;i<n;i++){
if(nTimes[0]==0){
if(candidate[1]==ID[i])
nTimes[1]++;
else if(candidate[2]==ID[i])
nTimes[2]++;
else{
candidate[0]=ID[i];
nTimes[0]++;
}
}else if(nTimes[1]==0){
if(candidate[0]==ID[i])
nTimes[0]++;
else if(candidate[2]==ID[i])
nTimes[2]++;
else{
candidate[1]=ID[i];
nTimes[1]++;
}
}else if(nTimes[2]==0){
if(candidate[1]==ID[i])
nTimes[1]++;
else if(candidate[0]==ID[i])
nTimes[0]++;
else{
candidate[2]=ID[i];
nTimes[2]++;
}
}else{
if(candidate[0]==ID[i])
nTimes[0]++;
else if(candidate[1]==ID[i])
nTimes[1]++;
else if(candidate[2]==ID[i])
nTimes[2]++;
else{
nTimes[0]--;
nTimes[1]--;
nTimes[2]--;
}
}
}
return candidate;
}
不对之处请多多指正。