/** * 就是用优先队列解决问题,特别经典的一个case * 值得深入记忆 */class Solution { public int[] topKFrequent(int[] nums, int k) { Map<Integer,Integer> map = new HashMap<>(); for(Integer i : nums){ map.put(i,map.getOrDefault(i,0) + 1); } PriorityQueue<Integer[]> priorityQueue = new PriorityQueue<Integer[]>(k, new Comparator<Integer[]>() { @Override public int compare(Integer[] o1, Integer[] o2) { Integer num1 = o1[1]; Integer num2 = o2[1]; return num1.compareTo(num2); } }); for(Map.Entry<Integer,Integer> entry : map.entrySet()){ Integer key = entry.getKey(); Integer num = entry.getValue(); if(priorityQueue.size() == k){ if(priorityQueue.peek()[1] < num){ priorityQueue.poll(); priorityQueue.add(new Integer[]{key,num}); } }else { priorityQueue.add(new Integer[]{key,num}); } } int[] ret = new int[k]; for (int i = 0; i < k; ++i) { ret[i] = priorityQueue.poll()[0]; } return ret; }}