是如下的扩展。
http://blog.csdn.net/xiaoding133/article/details/8035183
http://blog.csdn.net/xiaoding133/article/details/8035183
若size个发帖很多的ID,他们的发帖数目都超过了帖子总数目N的1/size,怎么从发贴的ID中快速找出他们的ID?
package com.chruan.test.algo;
/**
* 寻找发帖水王
* @author Chruan
* @version v1.0
* @date Oct 10, 2012
*/
public class Tango {
public static void main(String[] args) {
int a[] = {0,4,1,4,0,4,1,4,1,0,3,3,0,3,3,3};
calTango(a,3);
}
/**
* 若size个发帖很多的ID,他们的发帖数目都超过了帖子总数目N的1/size,怎么从发贴的ID中快速找出他们的ID?
* @param id 发贴的id列表
* @param size
*/
public static void calTango(int[] id, int size){
int[] candidates=new int[size];
int[] times = new int[size];
for (int idx=0;idx<size;idx++)
times[idx]=0;
boolean find = false;
for (int idx=0;idx<id.length;idx++){
//有空位就入座
for(int i=0;i<size;i++)
if (times[i]==0){
times[i]++;
find = true;
candidates[i]=id[idx];
break;
}
//没有空位
if (!find){
//是否已经入座,即座中有一样的id
for(int i=0;i<size;i++){
if (candidates[i]==id[idx]){
times[i]++;
find = true;
break;
}
}
//没有一样的,就都减1,即消去。
if (!find)
for (int i=0;i<size;i++){
times[i]--;
}
}
}
//输出
for (int i=0;i<size;i++)
{
// if (times[i]>0)
System.out.println(times[i] +" "+candidates[i]);
}
}
}