Frequency 类问题
Top K Frequent Elements
简单写法, 需要掌握用hashmap做heap的element
public List<Integer> topKFrequent(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int n : nums){
map.put(n, map.getOrDefault(n, 0) + 1);
}
PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<Map.Entry<Integer, Integer>>((o1, o2)->o2.getValue()-o1.getValue());
pq.addAll(map.entrySet());
List<Integer> ret = new ArrayList<Integer>();
for(int i=0;!pq.isEmpty() &&i<k;i++){
ret.add(pq.poll().getKey());
}
return ret;
}
速度尚可,超过65.15%
public class Solution {
private class Node implements Comparable<Node>{
int key;
int frequency;
public Node(int key, int frequency){
this.key = key;
this.frequency = frequency;
}
public int compareTo(Node a){
return a.frequency - this.frequency;
}
}
public List<Integer> topKFrequent(int[] nums, int k) {
PriorityQueue<Node> maxHeap = new PriorityQueue<Node>();
HashMap<Integer, Node> map = new HashMap<>();
List<Integer> list = new ArrayList<>();
for(int i = 0; i < nums.length; i++){
if(!map.containsKey(nums[i])){
map.put(nums[i], new Node(nums[i], 1));
} else {
Node node = map.get(nums[i]);
node.frequency ++;
map.put(nums[i], node);
}
}
for(Integer key : map.keySet()){
maxHeap.offer(map.get(key));
}
for(int i = 0; i < k; i++){
list.add(maxHeap.poll().key);
}
return list;
}
}