设计思路:(1)每次删除4个不同的ID(不管是否超过总数1/4的ID),那么,剩下的ID列表中,
原先发帖比例大于1/4的ID所占比例仍然大于1/4。可以通过不断重复这个过程,
把ID总数降低,从而得到问题的答案。
(2)用candidate[3]记录三个候选ID,用Times[3]记录它们的累积次数.
(3)然后遍历整个ID列表,每处理一个ID,若与candidate[i]中的某一个相同,
则Times[i]++,若与三个都不同,则说明找到了四个互不相同的ID,将三个
Times[i]--,也就相当于“删除了四个不同ID”.
(4)若某一个count[i]==0,则更新之。 源代码:
public class FindKingOfWater { public static void main(String args[]) { int ID[]={1,2,3,4,1,2,3}; Find(ID); } public static void Find(int ID[]) { int Times[]=new int[3]; int candidate[]=new int[3]; Times[0]=Times[1]=Times[2]=0; candidate[0]=candidate[1]=candidate[2]=0; for(int i=0;i<ID.length;i++) { if(ID[i]==candidate[0]) { Times[0]++; } else if(ID[i]==candidate[1]) { Times[1]++; } else if(ID[i]==candidate[2]) { Times[2]++; } else if(Times[0]==0) { Times[0]=1; candidate[0]=ID[i]; } else if(Times[1]==0) { Times[1]=1; candidate[1]=ID[i]; } else if(Times[2]==0) { Times[2]=1; candidate[2]=ID[i]; }
else { Times[0]--; Times[1]--; Times[2]--; } } for(int i=0;i<3;i++) { System.out.println("水王"+(i+1)+"的ID是:"+candidate[i]); } } }
程序截图: