题目 思路 遍历数组,保存在map里,key存元素值,value存元素出现的个数使用PriorityQueue,根据Map的value降序,并把map里的数据都塞到PriorityQueue中去从PriorityQueue中取k个数值,因为已经设定好PriorityQueue的取值规则,取值的时候自动按照Map的value降序来获取取出来的就是结果 代码实现 public class Test01 { public static void main(String[] args) { int[] nums = {1, 1, 1, 2, 2, 3,4,4,4,4,4,4}; int[] ints = topKFrequent(nums, 2); } public static int[] topKFrequent(int[] nums, int k) { HashMap<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int num = nums[i]; if (map.containsKey(num)) { map.put(num, map.get(num) + 1); } else { map.put(num, 1); } } // 定义一个优先级队列 PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<>((o1, o2) -> o2.getValue() - o1.getValue()); // 把Map的所有数塞到queue中 for (Map.Entry<Integer, Integer> entry : map.entrySet()) { queue.offer(entry); } int[] res = new int[k]; for (int i = 0; i < k; i++) { res[i] = queue.poll().getKey(); } return res; } }