71. Top K Frequent Elements
Topic :
priority queue
Difficulty :
medium
Problem Link :
problem statement
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] <= 104kis in the range[1, the number of unique elements in the array].- It is guaranteed that the answer is unique.
solution
import java.io.*;
import java.util.*;
class Top_K_Frequent_Elements
{
public static void main(String args[]){
int[] nums = {1,1,1,2,2,3};int k = 2;
System.out.println(Arrays.toString(topKFrequent(nums,k)));
}
static int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for(int ele : nums){
map.put(ele, map.getOrDefault(ele, 0) + 1); // mapping every element with its frequency
}
//modified max heap
// store in heap in preferrence to the element's frequency
// the element with max frequency will be at the top of the heap
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a,b) -> map.get(b) - map.get(a));
// add the keys in the heap
for(int key : map.keySet()){
maxHeap.add(key);
}
int ans[] = new int[k];
// poll from the heap for k times
for(int i = 0; i < k; i++){
ans[i] = maxHeap.poll();
}
return ans;
}
}