Q:

# C++ program to print all the Repeated Numbers with Frequency in an Array

Write a C++ program to print all the repeated numbers with their frequency in an array in minimum time complexity.

Input Example:

```    Array length: 10
Array input: 2 5 3 2 4 5 3 6 7 3
Output:
Repeated number	Frequency
3			3
5			2
2			2```

Data structures used:

```    Unordered_map <int, int>
```
• Key in the map is array value
• Value of key is frequency

Algorithm:

1. Declare a map hash to store array elements as keys and to associate their frequencies with them.
```    Unordered_map <int, int>hash;
```
1. For each array element
Insert it as key & increase frequencies.
For same key it will only increase frequencies.
```For i=0: n-1
hash[array [i]]++;
End For
```
1. Now to print the repeated character we need to print the keys (array elements) having value (frequencies) more than 1.
Set an iterator to hash.begin().
iterator->first is the key (array element) & iterator->second is the value( frequency of corresponding array value)
```IF
Iterator->second > 1
Print iterator->first & iterator->second
END IF
```

Explanation with example:

For this array: 2 5 3 2 4 5 3 6 7 3

The code:

```for(int i=0;i<n;i++){//creating the map
hash[a[i]]++;//for same key increase frequency
}```

Actually does the following

```    At i=0
array[i]=2
Insert 2 & increase frequency

Hash:
Key(element)	Value(frequency)
2	            1

At i=1
array[i]=5
Insert 5 & increase frequency

Hash:
Key(element)	Value(frequency)
2	            1
5	            1

At i=2
array[i]=3
Insert 3 & increase frequency

Hash:
Key(element)	Value(frequency)
2	            1
5	            1
3	            1

At i=3
array[i]=2
Insert 2 increase frequency
'2' is already there, thus frequency increase.

Hash:
Key(element)	Value(frequency)
2	            2
5	            1
3	            1

At i=4
array[i]=4
Insert 4 &increase frequency

Hash:
Key(element)	Value(frequency)
2	            2
5	            1
3	            1
4	            1

At i=5
array[i]=5
'5' is already there, thus frequency increase.

Hash:
Key(element)	Value(frequency)
2	            2
5	            2
3	            1
4	            1

At i=6
array[i]=3
'3' is already there, thus frequency increase.

Hash:
Key(element)	Value(frequency)
2	            2
5	            2
3	            2
4	            1

At i=7
array[i]=6
Insert 6, increase frequency.

Hash:
Key(element)	Value(frequency)
2	            2
5	            2
3	            2
4	            1
6	            1

At i=8
array[i]=7
Insert 7, increase frequency.

Hash:
Key(element)	Value(frequency)
2	            2
5	            2
3	            2
4	            1
6	            1
7	            1

At i=9
array[i]=3
'3' is already there, thus frequency increase.

Hash:
Key(element)	Value(frequency)
2	            2
5	            2
3	            3
4	            1
6	            1
7	            1```

## C++ implementation to print all the Repeated Numbers with Frequency in an Array

``````#include <bits/stdc++.h>

using namespace std;

void findRepeat(int* a, int n){
//Declare the map
unordered_map<int,int> hash;

for(int i=0;i<n;i++){//creating the map
hash[a[i]]++;//for same key increase frequency
}

cout<<"repeated number      frequency\n";
//iterator->first == key(element value)
//iterator->second == value(frequency)

for(auto it=hash.begin();it!=hash.end();it++)
if(it->second>1)//frequency>1 means repeating element
printf("%d\t\t\t%d\n",it->first,it->second);

}

int main()
{
int n;
cout<<"enter array length\n";
cin>>n;
int* a=(int*)(malloc(sizeof(int)*n));

cout<<"input array elements...\n";

for(int i=0;i<n;i++)
scanf("%d",&a[i]);

//function to print repeating elements with their frequencies
findRepeat(a,n);

return 0;
}``````

Output

```enter array length
10
input array elements...
2 5 3 2 4 5 3 6 7 3
repeated number      frequency
3               	3
2               	2
5               	2
```