思路:
使用小頂堆,最小的元素都出去了,省的就是大,高頻的元素了,所以要維護一個小頂堆,使用map存元素高頻變化,map存堆里,然后輸出堆的東西就行了
代碼:
class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);}PriorityQueue<Map.Entry<Integer, Integer>> p = new PriorityQueue<>(new Comparator<Map.Entry<Integer, Integer>>() {@Overridepublic int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {return o1.getValue() - o2.getValue();}});for (Map.Entry<Integer, Integer> entry : map.entrySet()) {p.offer(entry);if (p.size() > k)p.poll();}int[] res = new int[p.size()];int i = 0;while (!p.isEmpty()) {res[i++] = p.poll().getKey();}return res;}
}
?