public class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
//1. 遍历独立的元素并计数
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < nums.length; i++) {
if(!map.containsKey(nums[i])) {
map.put(nums[i], 1);
} else {
map.put(nums[i], map.get(nums[i]) + 1);
}
}
//2. 堆排序
PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<Map.Entry<Integer, Integer>>(
new Comparator<Map.Entry<Integer, Integer>>(){
public int compare(Map.Entry<Integer, Integer> entry1, Map.Entry<Integer, Integer> entry2) {
return entry1.getValue() - entry2.getValue();
}
});
//3. top K entry入列
for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
if(queue.size() < k) {
queue.offer(entry);
} else if(queue.peek().getValue() < entry.getValue()) {
queue.poll();
queue.offer(entry);
}
}
//4. 取出top k entry.key
List<Integer> answer = new ArrayList<Integer>();
for(Map.Entry<Integer, Integer> entry : queue) {
answer.add(entry.getKey());
}
return answer;
}
}