


You are given ‘ARR’ = {1, 2, 2, 3, 3} and ‘K’ = 2.
The answer will {2, 3} as 2 and 3 are the elements occurring most times.
The first line contains two space-separated integers, ‘N’ and ‘K’, representing the size of ‘ARR’ and the given integer ‘K’, respectively.
The second line contains ‘N’ space-separated integers representing the elements of ‘ARR’.
The only line contains the ‘K’ most frequent elements in ‘ARR’.
You do not need to print anything. It has already been taken care of. Just implement the given function.
Prerequisite: Quick Sort
In this approach, we will try to divide the problem at every step into a smaller problem. We know that the kth top frequent element is (n - k)th less frequent. So, we will do a partial sort from the less frequent element to the most frequent one, till (n - k)th less frequent element takes place (n - k) in a sorted array. To do so, we will use quickselect. Quickselect is an algorithm used to find the kth smallest element in an array. In this problem, we will modify the general quickselect algorithm to find (n - k)th less frequent element.
We will perform quickselect on an array containing all the keys of the hash map where the key is an element of ‘ARR’ and value is how often this element appears in 'ARR'. We will use a partition scheme to put all the less frequent elements to the left of the pivot and the more frequent elements to the right of the pivot. Then, we will put the pivot element at its correct position in the final sorted array(sorted according to the frequencies). When the pivot reaches the target position, i.e.,(n - k)th position, then all the elements to its right will be k most frequent elements.
Algorithm :
Maintain a function ‘QUICKSELECT’(‘LEFT’, ‘RIGHT’, ‘KSMALL’):
Maintain a function ‘PARTITION’(‘LEFT’, ‘RIGHT’, ‘PIVOT’):
In this approach, we will sort the unique elements of the input array according to how often this element appears in 'ARR'. We will use a hasp map where the key is element and value is how often this element appears in 'ARR'. Then we will initialize a heap where elements will be sorted in descending order according to the element’s frequency. We will add all the keys of the hash map to the heap and return the first ‘K’ elements of the heap.
Algorithm :
95We can observe that frequency of any element in ‘ARR’ can be a minimum of one and maximum ‘N’. So, we can create N buckets and add each unique element in the respective bucket according to its frequency. For example, for any element having frequency X we go to BUCKET[X]. After adding all the unique elements in their respective buckets, the ‘K’ elements starting from the rightmost buckets will be our answer.
Algorithm :