2013-02-25 77 views
-1

在最小时间复杂度下以最快的方式找到java中阵列的最大频率 A = [1,2,3,4,1,1]阵列中最大重复频率

ANS = 1

如何才能做到这一点

+3

排序一般情况下?如果数字的范围受限于一系列的计数器。 – 2013-02-25 00:21:20

+0

请参阅http://stackoverflow.com/questions/1991984/algorithm-for-finding-the-number-which-appears-the-most-in-a-row-c – user1929959 2013-02-25 00:23:08

+2

为什么答案= 1? 1重复了3次,答案应该是3对吗? – Kent 2013-02-25 00:24:25

回答

1

一个(大部分)线性时间的解决方案是使用一个HashMap<Integer, Integer>和建立中出现的A中的所有值的直方图

HashMap<Integer, Integer> m = new HashMap<Integer, Integer>(); 
for(int x : A) 
{ 
    Integer v = m.get(x); 
    if (null == v) {v = Integer.valueOf(0);} 
    m.put(x, ++v); 
} 

翻遍整个地图并返回最大值。 与entrySet()方法,这也是线性时间。