日期:2014-05-20  浏览次数:20613 次

某公司java笔试题 看看你能不能做上来!
一组数字 挑选出出现频率最高的

3 2 5 2 3 4 2 3 

最高的 是 2 和3 



------解决方案--------------------
我的笨方法:
Java code

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class MaxAppear {
    
    /**
     * <p>功能描述:执行</p>
     * @param intArray
     * @return
     * @author:jack
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public List<Integer> go(int[] intArray) {
        List<Integer> list = new ArrayList<Integer>();
        Map<Integer, Integer> map = this.init(intArray);
        for(int i : intArray) {
            map.put(i, map.get(i)+1);
        }
        this.calc(map, list);
        return list;
    }
    
    /**
     * <p>功能描述:计算出现最多的数字,存到List中</p>
     * @param map
     * @param list
     * @author:jack
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    private void calc(Map<Integer, Integer> map, List<Integer> list) {
        Integer max = Integer.MIN_VALUE;
        list.add(max);
        for(Entry<Integer, Integer> entry : map.entrySet()) {
            Integer key = entry.getKey();
            Integer value = entry.getValue();
            if(value>max) {
                list.remove(max);
                list.add(key);
                max = value;
            }else if(value==max) {
                list.add(key);
            }
        }
    }
    
    /**
     * <p>功能描述:把不重复的数字初始化到Map中</p>
     * @param intArray
     * @return
     * @author:jack
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    private Map<Integer, Integer> init(int[] intArray) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        HashSet<Integer> set = new HashSet<Integer>();
        for(int i : intArray) set.add(i);
        for(int i : set) map.put(i, 0);
        return map;
    }

    public static void main(String[] args) {
        MaxAppear maxAppear = new MaxAppear();
        int[] intArray = new int[]{3, 2, 5, 2, 3, 4, 2, 3 };
        List<Integer> list = maxAppear.go(intArray);
        System.out.println("出现频率最高的是:");
        for(int i : list) {
            System.out.print(i+"    ");
        }
    }

}