LeetCode[347]前K个高频元素
思路:
使用小顶堆,最小的元素都出去了,省的就是大,高频的元素了,所以要维护一个小顶堆,使用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;}
}