# 347. Top K Frequent Elements ###### tags: `leetcode`,`heapsort`,`medium` >ref: https://leetcode.com/problems/top-k-frequent-elements/ > Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order. >Example 1: Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2] >Example 2: Input: nums = [1], k = 1 Output: [1] >Constraints: 1 <= nums.length <= 105 k is in the range [1, the number of unique elements in the array]. It is guaranteed that the answer is unique. >1. poll O(1), foreach loop 似乎比較慢(leetcode測試) >2. minheap可鎖住priorityQueue 數量為k(超過時先add再poll) ```java= public int[] topKFrequent(int[] nums, int k) { Map<Integer,Integer> r= new HashMap<>(); for(int num:nums){ r.put(num,r.getOrDefault(num,0)+1); } PriorityQueue<Map.Entry<Integer,Integer>> ans_pre= new PriorityQueue<>((a,b)->a.getValue()-b.getValue()); for(Map.Entry<Integer,Integer> ke: r.entrySet()){ ans_pre.add(ke); if(ans_pre.size()>k){ ans_pre.poll(); } } int[] res= new int[k]; int count=0; while(count<k){ Map.Entry<Integer, Integer> entry = ans_pre.poll(); res[count++]=entry.getKey(); } return res; } ```