找小水王

寻找发帖“水王”问题的扩展:“超级水王”没有了。统计结果表明,有3个发帖很多的ID,他们的发帖数目都超过了帖子总数目N的1/4。你能从发帖ID列表中快速找出他们的ID吗?

 

(一)分析问题:

如果每次删除四个不同的ID(不管是否包含发帖数目超过总数1/4的ID),那么,在剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4,可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案

(二)代码实现:

package 找水王;



public class XSW{
    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);
        
    }
}
View Code

posted @ 2016-05-27 07:24  落地生根  阅读(110)  评论(0编辑  收藏  举报