用最大堆
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
/*
* @lc app=leetcode id=347 lang=java
*
* [347] Top K Frequent Elements
*/
class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
if(nums == null || nums.length == 0) return new ArrayList<Integer>();
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
List<Integer> list = new ArrayList<Integer>();
for(int i : nums){
map.put(i, map.getOrDefault(i, 0) + 1);
}
PriorityQueue<Map.Entry<Integer,Integer>> maxHeap =
new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());
for(Map.Entry<Integer, Integer> entry: map.entrySet()){
maxHeap.add(entry);
}
while(list.size() < k){
Map.Entry<Integer, Integer> entry = maxHeap.poll();
list.add(entry.getKey());
}
return list;
}
}