【竞赛】查找整型数组里出现频率最高的数字的算法
老紫竹 2009-02-24 04:47:49 从n个整数中查找出现频率最高的所有整数(用java实现)
示例:5,5,8,5,3,5,3,3,3,1
中出现频率最高的整数是3和5
提示:
方案1,最少的内存占用
方案2,最快的速度,不考虑内存
注意,数据中可能包含负数,比如
5,5,8,5,-3,5,-3,-3,-3,1
这类情况也要处理。
提供一个标准的数据提供程序,大家可以用这个做基准
private static int[] getdata() {
int NUMBER = 10000000;
int[] arr = new int[NUMBER];
Random ran = new Random(20090228);
int sign = -1;
for (int i = 0; i < NUMBER; i++) {
sign *= -1;
arr[i] = sign * ran.nextInt(NUMBER);
}
return arr;
}
生成1000万个随机数字,答案为
-9759534,-8687158,-6558899,-3713417,-2969181,-2684019,-950275,-274364,102097,2588019,4580505,4787470,5706388,6278099,6386057,8380143,8683339,9537038,出现次数为7
用时为:XXXX
这个时间,大家就自己考虑吧。因为每个人的机器不同,请直接提供你本地测试最快的,以及占用内存最少的就行了。
补充:
计数法对于那些数据量不是很大,但数据差异非常大的,并不适合,比如
{Integer.MIN_VALUE,1,Integer.MAX_VALUE}
类似这样的,呵呵,所以还是寻找一个更通用的解决方案。
特别是,如果数据是Long.MAX_VALUE怎么办!