347. 前 K 个高频元素

  1. class Solution {
  2. public int[] topKFrequent(int[] nums, int k) {
  3. int[] ans = new int[k];
  4. Map<Integer, Integer> map = new HashMap<>();
  5. for (int num : nums) {
  6. if (!map.containsKey(num)) {
  7. map.put(num, 1);
  8. } else {
  9. map.put(num, map.get(num) + 1);
  10. }
  11. }
  12. PriorityQueue<Integer> minHeap = new PriorityQueue<>(new Comparator<Integer>(){
  13. @Override
  14. public int compare(Integer o1, Integer o2) {
  15. return map.get(o1) - map.get(o2);
  16. }
  17. });
  18. for (Integer key : map.keySet()) {
  19. minHeap.offer(key);
  20. if (minHeap.size() > k)
  21. minHeap.poll();
  22. }
  23. for (int i = 0; i < k; i++) {
  24. ans[i] = minHeap.remove();
  25. }
  26. return ans;
  27. }
  28. }