模板题目:Heap( 347 Top K Frequent Elements)
Given a non-empty array of integers, return the k most frequent elements.
下面是我之前的解法:
所谓的Heap就是PQ
public class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for(int n: nums){
map.put(n, map.getOrDefault(n,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);
}
List<Integer> res = new ArrayList<>();
while(res.size()<k){
Map.Entry<Integer, Integer> entry = maxHeap.poll();
res.add(entry.getKey());
}
return res;
}
}
其实这个代码的想法很简单 就是构建频率hashmap,然后构建PQ 把表中的元素放进去 按照频率进行排列,然后再拿出来K个 就行了。
这道题虽然简单 但是无疑给我们提了一个醒:虽然PQ不常用到 但是一定要能想到,别铁憨憨只会Arrays.sort();

浙公网安备 33010602011771号