码迷,mamicode.com
首页 > 其他好文 > 详细

找小水王

时间:2016-05-27 08:17:43      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

寻找发帖“水王”问题的扩展:“超级水王”没有了。统计结果表明,有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

技术分享

找小水王

标签:

原文地址:http://www.cnblogs.com/hanzhu/p/5533321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!