用到了小顶堆始终在堆里保持k个当前高频的元素堆口是元素中最低频的用于随时切换注意一下堆存二维数组以及map的迭代方式Map.EntryInteger,Integer entry : map.entrySet()class Solution { public int[] topKFrequent(int[] nums, int k) { MapInteger,Integer map new HashMap(); PriorityQueueint[] p new PriorityQueue((p1,p2) - p1[1] - p2[1]); for(int i 0;i nums.length;i){ map.put(nums[i],map.getOrDefault(nums[i],0) 1); } for(Map.EntryInteger,Integer entry : map.entrySet()){ if(p.size() k){ p.add(new int[]{entry.getKey(),entry.getValue()}); }else{ if(entry.getValue() p.peek()[1]){ p.poll(); p.add(new int[]{entry.getKey(),entry.getValue()}); } } } int[] res new int[k]; for(int j k - 1;j 0;j--){ res[j] p.poll()[0]; } return res; } }