面试题以及解答DEMO

问题:求数字重复,并且按最大降序排

描述:

给定一个只包含正整数且非空的数组,返回该数组中重复次数最多的前N个数字(返回结果按重复次数从多到少降序排序,N不存在取值非法的情况),请用最熟悉的语言或者伪代码实现该需求

    public static void main(String[] args) {
        //获取数据
        int[] num = getNums(50,100);
        //转成Map,统计好次数
        Map<Integer, Integer> map = changeToMap(num);
        //按要求统计好后输出
        getRepetitionNum(map, 5);
    }

    /** 
     * @Title: changeToMap 
     * @Description: 转成Map,统计好次数
     * @param num
     * @return 参数说明
     * @return Map<Integer,Integer>    返回类型
     */
    private static Map<Integer, Integer> changeToMap(int[] num) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i : num) {
            if (map.get(i) == null) {
                map.put(i, 1);
            } else {
                map.put(i, map.get(i) + 1);
            }
        }
        return map;
    }

    /** 
     * @Title: getRepetitionNum 
     * @Description: 获取前N个重复数字
     * @param map
     * @param n
     * @return 参数说明
     * @return List<Entry<Integer,Integer>>    返回类型
     */
    private static List<Entry<Integer, Integer>> getRepetitionNum(Map<Integer, Integer> map, int n) {
        List<Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
            // 升序排序
            @Override
            public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }

        });
        Entry<Integer, Integer> entry = null;
        for (int i = 0; i < n; i++) {
            entry = list.get(i);
            System.out.println("key:" + entry.getKey() + "  ====>value:" + entry.getValue());
        }
        return list;
    }

    /** 
     * @Title: getNums 
     * @Description: 获取数据
     * @param size
     * @param scope
     * @return 参数说明
     * @return int[]    返回类型
     */
    private static int[] getNums(int size, int scope) {
        int[] nums = new int[size];
        Random random = new Random();
        for (int i = 0; i < size; i++) {
            nums[i] = random.nextInt(scope);
        }
        return nums;
    }

 

posted on 2018-03-15 17:37  Mrlw  阅读(412)  评论(0)    收藏  举报

导航