查找整型数组里出现频率最高的数字最佳Java实现?<--这是问题

解决方案 »

  1.   

    public static void main(String[] args) {
    int m[] = {1,2,2,3,3,3,4,4,4,4,5,5,5,5,2,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7};

    HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

    for(int i = 0; i < m.length ; i++){
    int count = 0;
    int k = i;

    for(int j = 0; j < m.length; j++){
    if(m[i] == m[j]){
    count++;
    }
    }

    map.put(m[i], count);
    } Set<Integer> set = map.keySet();

    for(Iterator<Integer> iter = set.iterator(); iter.hasNext(); ){
    int key = iter.next();
    System.out.println(key + "出现了" + map.get(key) + "次");
    }
    }
      

  2.   

    code=Java]
    public static void main(String[] args) {
    int m[] = {1,2,2,3,3,3,4,4,4,4,5,5,5,5,2,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7};

    HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

    for(int i = 0; i < m.length ; i++){
    int count = 0;
    int k = i;

    for(int j = 0; j < m.length; j++){
    if(m[i] == m[j]){
    count++;
    }
    }

    map.put(m[i], count);
    }
    Set<Integer> set = map.keySet();

    for(Iterator<Integer> iter = set.iterator(); iter.hasNext(); ){
    int key = iter.next();
    System.out.println(key + "出现了" + map.get(key) + "次");
    }
    }
    [/code]
      

  3.   

    没测试过,不知道是用Map好还是用一个Integer.MAX_VALUE大小的数组好。
    用数组占的空间是不小,不过速度应该很快,适合统计巨大量整数的情况。
      

  4.   

    如果按照楼上的办法,用map,效率应该是n*n。 
    如果是我做,我想到的方法是,把a-Z作为26+26=52的数组a=[0,0,0,0,0,0,0,0,0,0,0...]
     b=[12,1,2,5,12,2,5,8,5,7]
    for(int i=0;i<b.length();i++){
    int c=b[i];
    a[c]+=1;
    }
    所以:a=[0,0,1,0,0,0...],遍历字符串可以得到个数。 
    再取出就好了。 
    时间复杂度为n而已,快了一倍,呵呵!~ 不知道有没有更好的办法呢?
      

  5.   

    补充:楼主要求是出现次数最多的一个数所以可以把
    for(Iterator <Integer> iter = set.iterator(); iter.hasNext(); ){ 
        int key = iter.next(); 
        System.out.println(key + "出现了" + map.get(key) + "次"); 

    换成:Object str[] = set.toArray();
    Arrays.sort(str);
    System.out.print(str[str.length-1] + " 出现次数最多," + map.get(str[str.length-1]) + "次");