课堂作业找水王2

找水王2:

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

设计思想:

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

代码实现:

package test1;

public class ForumKing {

    public static void main(String[] args) {
        int ID[]={1,1,3,1,2,3,2,2,3,4};
        int n=10;
        int times[]=new int[3];
        int king[] =new int[3];
        times[0]=times[1]=times[2]=0;
        king[0]=king[1]=king[2]=-1;
        for(int i=0;i<n;i++){ 
              if(ID[i]==king[0])  
              {    
                  times[0]++;     
              }
              else if(ID[i]==king[1])   
              {
                  times[1]++;
              }    
              else if(ID[i]==king[2])   
              {    
                  times[2]++;
              }   
              else if(times[0]==0)   
              {    
                  times[0]=1;    
                  king[0]=ID[i];    
              }    
              else if(times[1]==0)   
              {    
                  times[1]=1;    
                  king[1]=ID[i];   
              }    
              else if(times[2]==0)   
              {    
                  times[2]=1;    
                  king[2]=ID[i];   
              } 
              else//此时删除四个不同元素   
              {    
                  times[0]--;    
                  times[1]--;    
                  times[2]--;   
              }   
        }
        System.out.println("水王的ID:");
        for(int j=0;j<3;j++)
        {
            System.out.print(king[j]+" ");
        }
    }

}

结果截图:

心得体会:

这一类问题大致就是运用一个思想就能解决那就是等效替换的思想,利用消除多余项来简化问题,这种思想很是简洁实用。

posted @ 2016-05-27 17:18  q白月倚寒楼  阅读(150)  评论(0编辑  收藏  举报