programa en C ++ para imprimir todos los números repetidos con frecuencia en una matriz

En este artículo vamos a ver cómo imprimir todos los números que se repiten con su frecuencia en una matriz con uso de STL ?

Planteamiento del problema: Escribir un programa en C ++ para imprimir todos los números repetidos con su frecuencia en una matriz en la complejidad de tiempo mínimo .

Ejemplo de entrada:

    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

Solución

estructuras de datos utilizadas:

    Unordered_map <int, int>

  • clave en el mapa es valor de matriz
  • Valor de la clave es la frecuencia

Algoritmo:

  1. Declarar una de hash mapa a los elementos de la matriz como tienda de teclas y para asociar sus frecuencias con ellos.
  2.     Unordered_map <int, int>hash;

  3. class cada elemento de la matriz
    insertarlo como clave y aumentar las frecuencias.
    For misma clave que sólo aumentará frecuencias.
  4. For i=0: n-1
    hash[array [i]]++;
    End For

  5. ahora para imprimir el carácter repetido tenemos que imprimir las teclas (elementos de matriz) que tienen valor (frecuencias) más de 1. Conjunto
    un iterador a hash.begin () .
    iterator-> primera es la clave (elemento de la matriz) y iterator-> segundo es el valor (frecuencia de correspondiente valor de matriz)
  6. IF
    Iterator->second > 1
    Print iterator->first & iterator->second
    END IF

Explicación con ejemplo:

For este matriz: 2 5 3 2 4 5 3 6 7 3

el código:

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

realmente hace la siguiente

    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

implementación en C ++ para imprimir todos los números repetidos con frecuencia en una matriz

#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 frequencyn";
//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("%dttt%dn",it->first,it->second);
}
int main()
{
int n;
cout<<"enter array lengthn";
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;
}

salida

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


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *