source: https://leetcode.com/problems/top-k-frequent-elements/description/
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
- -104 <= nums[i] <= 104
- k is in the range [1, the number of unique elements in the array].
- It is guaranteed that the answer is unique.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class Solution { public int[] topKFrequent(int[] nums, int k) { Map<Integer,Integer> count = new HashMap<>(); for(int n: nums) { count.put(n, count.getOrDefault(n, 0) + 1); } Queue<Integer> pq = new PriorityQueue<>((p, q) -> count.get(p) - count.get(q)); for(int a : count.keySet()) { pq.add(a); if (pq.size() > k) { pq.poll(); } } int[] r= new int[k]; int i = 0; while(!pq.isEmpty()) { r[i++] = pq.poll(); } return r; } } |