# Find top three repeated in array

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); ` `    ``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)

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : rachana soma

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.