Related Articles
Find top three repeated in array
• Difficulty Level : Easy
• Last Updated : 16 May, 2019

Given an array of size N with repeated numbers, You Have to Find the top three repeated numbers.
Note : If Number comes same number of times then our output is one who comes first in array
Examples:

Input : arr[] = {3, 4, 2, 3, 16, 3, 15, 16, 15, 15, 16, 2, 3}
Output : Three largest elements are 3 16 15
Explanation :Here, 3 comes 4 times, 16 comes 3 times, 15 comes 3 times.

Input : arr[] = {2, 4, 3, 2, 3, 4, 5, 5, 3, 2, 2, 5}
Output : Three largest elements are 2 3 5

First We have to find the frequency of each element in a hash table freq. Now Our Task is to Find top 3 elements in the hash table, To Find it We just use three pair type variable ( suppose x, y, z)in which first store the frequency and second store the actual number.
Algorithm

```1) Initialize the largest three elements
as Minimum value.
x.first = y.first = z.first = Minus-Infinite

2) Iterate through all elements of the
hash table freq.
a) Let current array element be p.
b) If (fre[p] !=0 && fre[p] > x.first)
{
// This order of assignment is important
z = y
y = x
x.first = fre[p]
x.second = p;
}
c) Else if (fre[p] !=0 && free[p] > y.first)
{
z = y
y.first = fre[p]
y.second = p
}
d) Else if (fre[p] !=0 && free[p] > z.first)
{
z.first = fre[p]
z.second = p
}

// Modify frequency of Current element
// as zero because We Traverse Initial
// array arr[]. So it don't take same
// values again
3) fre[p] = 0

3) Print x.second, y.second and z.second. ```

## C++

 `// C++ Program to Find the top three repeated numbers``#include ``using` `namespace` `std;`` ` `/* Function to print top three repeated numbers */``void` `top3Repeated(``int` `arr[], ``int` `n)``{``    ``// There should be atleast two elements``    ``if` `(n < 3) {``        ``cout << ``"Invalid Input"``;``        ``return``;``    ``}`` ` `    ``// Count Frequency of each element``    ``unordered_map<``int``, ``int``> fre;``    ``for` `(``int` `i = 0; i < n; i++)``        ``fre[arr[i]]++;`` ` `    ``// Initialize first value of each variable``    ``// of Pair type is INT_MIN``    ``pair<``int``, ``int``> x, y, z;``    ``x.first = y.first = z.first = INT_MIN;`` ` `    ``for` `(``auto` `curr : fre) {`` ` `        ``// If frequency of current element``        ``// is not zero and greater than``        ``// frequency of first largest element``        ``if` `(curr.second > x.first) {`` ` `            ``// Update second and third largest``            ``z = y;``            ``y = x;`` ` `            ``// Modify values of x Number``            ``x.first = curr.second;``            ``x.second = curr.first;``        ``}`` ` `        ``// If frequency of current element is``        ``// not zero and frequency of current``        ``// element is less than frequency of``        ``// first largest element, but greater``        ``// than y element``        ``else` `if` `(curr.second > y.first) {`` ` `            ``// Modify values of third largest``            ``z = y;`` ` `            ``// Modify values of second largest``            ``y.first = curr.second;``            ``y.second = curr.first;``        ``}`` ` `        ``// If frequency of current element``        ``// is not zero and frequency of``        ``// current element is less than``        ``// frequency of first element and``        ``// second largest, but greater than``        ``// third largest.``        ``else` `if` `(curr.second > z.first) {`` ` `            ``// Modify values of z Number``            ``z.first = curr.second;``            ``z.second = curr.first;``        ``}``    ``}`` ` `    ``cout << ``"Three largest elements are "``         ``<< x.second << ``" "` `<< y.second``         ``<< ``" "` `<< z.second;``}`` ` `// Driver's Code``int` `main()``{``    ``int` `arr[] = { 3, 4, 2, 3, 16, 3, 15,``                  ``16, 15, 15, 16, 2, 3 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``top3Repeated(arr, n);``    ``return` `0;``}`

## Java

 `// Java Program to Find the top three repeated numbers``import` `java.io.*;``import` `java.util.*;`` ` `// User defined Pair class``class` `Pair {``    ``int` `first, second;``}`` ` `class` `GFG {`` ` `    ``// Function to print top three repeated numbers``    ``static` `void` `top3Repeated(``int``[] arr, ``int` `n)``    ``{``        ``// There should be atleast two elements``        ``if` `(n < ``3``) {``            ``System.out.print(``"Invalid Input"``);``            ``return``;``        ``}`` ` `        ``// Count Frequency of each element``        ``TreeMap freq = ``new` `TreeMap<>();``        ``for` `(``int` `i = ``0``; i < n; i++)``            ``if` `(freq.containsKey(arr[i]))``                ``freq.put(arr[i], ``1` `+ freq.get(arr[i]));``            ``else``                ``freq.put(arr[i], ``1``);`` ` `        ``// Initialize first value of each variable``        ``// of Pair type is INT_MIN``        ``Pair x = ``new` `Pair();``        ``Pair y = ``new` `Pair();``        ``Pair z = ``new` `Pair();``        ``x.first = y.first = z.first = Integer.MIN_VALUE;`` ` `        ``for` `(Map.Entry curr : freq.entrySet()) {``            ``// If frequency of current element``            ``// is not zero and greater than``            ``// frequency of first largest element``            ``if` `(Integer.parseInt(String.valueOf(curr.getValue())) > x.first) {`` ` `                ``// Update second and third largest``                ``z.first = y.first;``                ``z.second = y.second;``                ``y.first = x.first;``                ``y.second = x.second;`` ` `                ``// Modify values of x Number``                ``x.first = Integer.parseInt(String.valueOf(curr.getValue()));``                ``x.second = Integer.parseInt(String.valueOf(curr.getKey()));``            ``}`` ` `            ``// If frequency of current element is``            ``// not zero and frequency of current``            ``// element is less than frequency of``            ``// first largest element, but greater``            ``// than y element``            ``else` `if` `(Integer.parseInt(String.valueOf(curr.getValue())) > y.first) {``                ``// Modify values of third largest``                ``z.first = y.first;``                ``z.second = y.second;`` ` `                ``// Modify values of second largest``                ``y.first = Integer.parseInt(String.valueOf(curr.getValue()));``                ``y.second = Integer.parseInt(String.valueOf(curr.getKey()));``            ``}`` ` `            ``// If frequency of current element``            ``// is not zero and frequency of``            ``// current element is less than``            ``// frequency of first element and``            ``// second largest, but greater than``            ``// third largest.``            ``else` `if` `(Integer.parseInt(String.valueOf(curr.getValue())) > z.first) {`` ` `                ``// Modify values of z Number``                ``z.first = Integer.parseInt(String.valueOf(curr.getValue()));``                ``z.second = Integer.parseInt(String.valueOf(curr.getKey()));``            ``}``        ``}`` ` `        ``System.out.print(``"Three largest elements are "` `+ x.second + ``" "``                         ``+ y.second + ``" "` `+ z.second);``    ``}`` ` `    ``// Driver's Code``    ``public` `static` `void` `main(String args[])``    ``{``        ``int``[] arr = { ``3``, ``4``, ``2``, ``3``, ``16``, ``3``, ``15``,``                      ``16``, ``15``, ``15``, ``16``, ``2``, ``3` `};``        ``int` `n = arr.length;``        ``top3Repeated(arr, n);``    ``}``}`` ` `// This code is contributed by rachana soma`
Output:
```Three largest elements are 3 15 16
```

Time Complexity : O(n)
Auxiliary Space : O(n)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up