课堂作业找水王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]+" "); } } }
结果截图:
心得体会:
这一类问题大致就是运用一个思想就能解决那就是等效替换的思想,利用消除多余项来简化问题,这种思想很是简洁实用。