寻找发帖“水王”问题的扩展:“超级水王”没有了。统计结果表明,有3个发帖很多的ID,他们的发帖数目都超过了帖子总数目N的1/4。你能从发帖ID列表中快速找出他们的ID吗?
(一)分析问题:
如果每次删除四个不同的ID(不管是否包含发帖数目超过总数1/4的ID),那么,在剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4,可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案
(二)代码实现:
package 找小水王; public class Xiaoshuiwang { 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); } }
(三)实验截图:
时间: 2024-12-21 23:12:25