《编程之美》寻找发帖水王 质疑

1.寻找发帖水王

《编程之美》一书上关于发帖水王的解答请参见点击打开链接。但是该算法求解的答案并不符合题意,当前求解的答案只是候选者,绝不是真正的发帖水王。比如,输入:{1,2,3,4,5,6,7,87,8,9,10,11,11},输出:11.此时很直观可以确认id=11的作者不是发帖水王。书上给出的算法求解的只是候选者后,应再进行一遍遍历计数,确定个数确实大于总个数的一半,才能被认为是发帖水王。

 2.求解发帖水王

	// 找到超过n/2项的众数
	public int findKing(int[] ids) {
		if(ids==null || ids.length<1) return -1;
		int candidate = ids[0],nTime = 1;
		for(int i=1;iids.length/2) return candidate;
		else return -1;
	}

3.求解发帖水王的拓展问题

	// 找到三个id的发帖数量都超过n/4项的众数集合
	public void findKings(int[] ids) {
		if(ids==null ||ids.length<3) return;
		int[] candidate = {-1,-1,-1};
		int[] nTime = {0,0,0};
		for(int i=0;iids.length/4&&count[1]>ids.length/4&&count[2]>ids.length/4)
			System.out.println(candidate[0]+"\t"+candidate[1]+"\t"+candidate[2]);
		else
			System.out.println("不存在");
	}


你可能感兴趣的:(Java语言,算法)