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); ` `    ``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
Recommended Articles
Page :