标签:
寻找发帖“水王”问题的扩展:“超级水王”没有了。统计结果表明,有3个发帖很多的ID,他们的发帖数目都超过了帖子总数目N的1/4。你能从发帖ID列表中快速找出他们的ID吗?
(一)分析问题:
如果每次删除四个不同的ID(不管是否包含发帖数目超过总数1/4的ID),那么,在剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4,可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案
(二)代码实现:
package 找小水王;
public class Xiaoshuiwang {
static void Find(int ID[],int N,int candidate[])
{
int nTimes[]={0,0,0};
for(int i=0;i<N;i++)
{
if(ID[i]==candidate[0])
{nTimes[0]++;}
else if(ID[i]==candidate[1])
{nTimes[1]++;}
else if(ID[i]==candidate[1])
{nTimes[2]++;}
else if(nTimes[0]==0)
{
nTimes[0]=1;
candidate[0]=ID[i];
}
else if(nTimes[1]==0)
{
nTimes[1]=1;
candidate[1]=ID[i];
}
else if(nTimes[2]==0)
{
nTimes[2]=1;
candidate[2]=ID[i];
}
else
{
nTimes[0]--;
nTimes[1]--;
nTimes[2]--;
}
}
System.out.println("三个符合条件的ID分别是");
for(int i=0;i<3;i++)
{
System.out.println(candidate[i]+" ");
}
}
public static void main(String args[])
{
int ID[]={1,1,1,2,2,2,3,3,3,1,2,3,1,2,3,6};
int N=16;
int candidate[] = {-1,-1,-1};
System.out.println("打印ID列表");
for(int i=0;i<N;i++)
{
System.out.println(ID[i]);
}
Find(ID,N,candidate);
}
}
(三)实验截图:
标签:
原文地址:http://www.cnblogs.com/maplely/p/5535604.html