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]
1 <= nums.length <= 10^5k is in the range [1, the number of unique elements in the array].Min-heap of size k: maintain the k most frequent elements.
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> freq = new HashMap<>();
for (int n : nums) freq.merge(n, 1, Integer::sum);
// Min-heap by frequency — keeps only the k most frequent
PriorityQueue<Integer> minHeap =
new PriorityQueue<>(Comparator.comparingInt(freq::get));
for (int num : freq.keySet()) {
minHeap.offer(num);
if (minHeap.size() > k) minHeap.poll(); // remove least frequent
}
return minHeap.stream().mapToInt(i -> i).toArray();
}Time: O(n log k) · Space: O(n)