面试题以及解答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; }
浙公网安备 33010602011771号