Medir la frecuencia de los elementos en una array es una habilidad realmente útil y requiere muchos problemas de codificación competitivos. Nosotros, en muchos problemas, estamos obligados a medir la frecuencia de varios elementos como números, alfabetos, símbolos, etc. como parte de nuestro problema.
método ingenuo
Ejemplos:
Input : arr[] = {10, 20, 20, 10, 10, 20, 5, 20} Output : 10 3 20 4 5 1 Input : arr[] = {10, 20, 20} Output : 10 2 20 1
Ejecutamos dos bucles. Para cada artículo, cuente el número de veces que ocurre. Para evitar la impresión duplicada, realice un seguimiento de los artículos procesados.
C++
// C++ program to count frequencies of array items #include <bits/stdc++.h> using namespace std; void countFreq(int arr[], int n) { // Mark all array elements as not visited vector<int> visited(n, false); // Traverse through array elements and // count frequencies for (int i = 0; i < n; i++) { // Skip this element if already processed if (visited[i] == true) continue; // Count frequency int count = 1; for (int j = i + 1; j < n; j++) { if (arr[i] == arr[j]) { visited[j] = true; count++; } } cout << arr[i] << " " << count << endl; } } int main() { int arr[] = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = sizeof(arr) / sizeof(arr[0]); countFreq(arr, n); return 0; }
Java
// Java program to count frequencies // of array items import java.util.*; class GFG { static void countFreq(int arr[], int n) { // Mark all array elements as not visited boolean []visited = new boolean[n]; // Traverse through array elements and // count frequencies for (int i = 0; i < n; i++) { // Skip this element if already processed if (visited[i] == true) continue; // Count frequency int count = 1; for (int j = i + 1; j < n; j++) { if (arr[i] == arr[j]) { visited[j] = true; count++; } } System.out.println(arr[i] + " " + count); } } // Driver Code public static void main(String[] args) { int arr[] = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = arr.length; countFreq(arr, n); } } // This code is contributed by 29AjayKumar
Python3
# Python program to count frequencies # of array items def countFreq(arr, n): # mark all array elements as not visited visited = [False for i in range(n)] # Traverse through array elements # and count frequencies for i in range(n): # Skip this element if already processed if visited[i] == True: continue # count frequency count = 1 for j in range(i + 1, n): if arr[i] == arr[j]: visited[j] = True count += 1 print(arr[i], count) # Driver code a = [10, 20, 20, 10, 10, 20, 5, 20] n = len(a) countFreq(a, n) # This code is contributed # by Mohit kumar 29
C#
// C# program to count frequencies // of array items using System; class GFG { static void countFreq(int []arr, int n) { // Mark all array elements as not visited Boolean []visited = new Boolean[n]; // Traverse through array elements and // count frequencies for (int i = 0; i < n; i++) { // Skip this element if already processed if (visited[i] == true) continue; // Count frequency int count = 1; for (int j = i + 1; j < n; j++) { if (arr[i] == arr[j]) { visited[j] = true; count++; } } Console.WriteLine(arr[i] + " " + count); } } // Driver Code public static void Main(String[] args) { int []arr = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = arr.Length; countFreq(arr, n); } } // This code is contributed by Rajput-Ji
Javascript
<script> // Javascript program to count frequencies of array items function countFreq(arr, n) { // Mark all array elements as not visited let visited = new Array(n); visited.fill(false); // Traverse through array elements and // count frequencies for (let i = 0; i < n; i++) { // Skip this element if already processed if (visited[i] == true) continue; // Count frequency let count = 1; for (let j = i + 1; j < n; j++) { if (arr[i] == arr[j]) { visited[j] = true; count++; } } document.write(arr[i] + " " + count + "</br>"); } } let arr = [ 10, 20, 20, 10, 10, 20, 5, 20 ]; let n = arr.length; countFreq(arr, n); // This code is contributed by mukesh07. </script>
10 3 20 4 5 1
Métodos optimizados:
Medir frecuencias cuando los elementos están limitados por valor
Si nuestra array de entrada tiene valores pequeños, podemos usar los elementos de la array como índice en una array de conteo e incrementar el conteo. En el siguiente ejemplo, los elementos son un máximo de 10.
Input : arr[] = {5, 5, 6, 6, 5, 6, 1, 2, 3, 10, 10} limit = 10 Output : 1 1 2 1 3 1 5 3 6 3 10 2
C++
// C++ program to count frequencies of array items // having small values. #include <bits/stdc++.h> using namespace std; void countFreq(int arr[], int n, int limit) { // Create an array to store counts. The size // of array is limit+1 and all values are // initially 0 vector<int> count(limit+1, 0); // Traverse through array elements and // count frequencies (assuming that elements // are limited by limit) for (int i = 0; i < n; i++) count[arr[i]]++; for (int i = 0; i <= limit; i++) if (count[i] > 0) cout << i << " " << count[i] << endl; } int main() { int arr[] = {5, 5, 6, 6, 5, 6, 1, 2, 3, 10, 10}; int n = sizeof(arr) / sizeof(arr[0]); int limit = 10; countFreq(arr, n, limit); return 0; }
Java
// Java program to count frequencies of array items // having small values. class GFG { static void countFreq(int arr[], int n, int limit) { // Create an array to store counts. The size // of array is limit+1 and all values are // initially 0 int []count = new int[limit + 1]; // Traverse through array elements and // count frequencies (assuming that elements // are limited by limit) for (int i = 0; i < n; i++) count[arr[i]]++; for (int i = 0; i <= limit; i++) if (count[i] > 0) System.out.println(i + " " + count[i]); } // Driver Code public static void main(String[] args) { int arr[] = {5, 5, 6, 6, 5, 6, 1, 2, 3, 10, 10}; int n = arr.length; int limit = 10; countFreq(arr, n, limit); } } // This code is contributed by PrinciRaj1992
Python3
# Python3 program to count frequencies of # array items having small values. def countFreq(arr, n, limit): # Create an array to store counts. # The size of array is limit+1 and # all values are initially 0 count = [0 for i in range(limit + 1)] # Traverse through array elements and # count frequencies (assuming that # elements are limited by limit) for i in range(n): count[arr[i]] += 1 for i in range(limit + 1): if (count[i] > 0): print(i, count[i]) # Driver Code arr = [ 5, 5, 6, 6, 5, 6, 1, 2, 3, 10, 10 ] n = len(arr) limit = 10 countFreq(arr, n, limit) # This code is contributed by avanitrachhadiya2155
C#
// C# program to count frequencies of // array items having small values. using System; class GFG { static void countFreq(int []arr, int n, int limit) { // Create an array to store counts. // The size of array is limit+1 and // all values are initially 0 int []count = new int[limit + 1]; // Traverse through array elements and // count frequencies (assuming that // elements are limited by limit) for (int i = 0; i < n; i++) count[arr[i]]++; for (int i = 0; i <= limit; i++) if (count[i] > 0) Console.WriteLine(i + " " + count[i]); } // Driver Code public static void Main(String[] args) { int []arr = {5, 5, 6, 6, 5, 6, 1, 2, 3, 10, 10}; int n = arr.Length; int limit = 10; countFreq(arr, n, limit); } } // This code is contributed // by Princi Singh
Javascript
<script> // Javascript program to count frequencies // of array items having small values. function countFreq(arr, n, limit) { // Create an array to store counts. // The size of array is limit+1 and // all values are initially 0 let count = new Array(limit + 1); count.fill(0); // Traverse through array elements and // count frequencies (assuming that // elements are limited by limit) for(let i = 0; i < n; i++) count[arr[i]]++; for(let i = 0; i <= limit; i++) if (count[i] > 0) document.write(i + " " + count[i] + "</br>"); } // Driver code let arr = [ 5, 5, 6, 6, 5, 6, 1, 2, 3, 10, 10 ]; let n = arr.length; let limit = 10; countFreq(arr, n, limit); // This code is contributed by rameshtravel07 </script>
1 1 2 1 3 1 5 3 6 3 10 2
C++
// C++ program to count frequencies of array items #include <bits/stdc++.h> using namespace std; const int limit = 255; void countFreq(string str) { // Create an array to store counts. The size // of array is limit+1 and all values are // initially 0 vector<int> count(limit+1, 0); // Traverse through string characters and // count frequencies for (int i = 0; i < str.length(); i++) count[str[i]]++; for (int i = 0; i <= limit; i++) if (count[i] > 0) cout << (char)i << " " << count[i] << endl; } int main() { string str = "GeeksforGeeks"; countFreq(str); return 0; }
Java
// Java program to count frequencies of array items class GFG { static int limit = 255; static void countFreq(String str) { // Create an array to store counts. The size // of array is limit+1 and all values are // initially 0 int []count= new int[limit + 1]; // Traverse through string characters and // count frequencies for (int i = 0; i < str.length(); i++) count[str.charAt(i)]++; for (int i = 0; i <= limit; i++) if (count[i] > 0) System.out.println((char)i + " " + count[i]); } // Driver Code public static void main(String[] args) { String str = "GeeksforGeeks"; countFreq(str); } } // This code is contributed by PrinciRaj1992
Python3
# Python3 program to count frequencies of array items limit = 255 def countFreq(Str) : # Create an array to store counts. The size # of array is limit+1 and all values are # initially 0 count = [0] * (limit + 1) # Traverse through string characters and # count frequencies for i in range(len(Str)) : count[ord(Str[i])] += 1 for i in range(limit + 1) : if (count[i] > 0) : print(chr(i), count[i]) Str = "GeeksforGeeks" countFreq(Str) # This code is contributed by divyeshrabadiya07
C#
// C# program to count frequencies // of array items using System; class GFG { static int limit = 25; static void countFreq(String str) { // Create an array to store counts. // The size of array is limit+1 and // all values are initially 0 int []count = new int[limit + 1]; // Traverse through string characters // and count frequencies for (int i = 0; i < str.Length; i++) count[str[i] - 'A']++; for (int i = 0; i <= limit; i++) if (count[i] > 0) Console.WriteLine((char)(i + 'A') + " " + count[i]); } // Driver Code public static void Main(String[] args) { String str = "GEEKSFORGEEKS"; countFreq(str); } } // This code is contributed by PrinciRaj1992
Javascript
<script> // Javascript program to count frequencies of array items let limit = 255; function countFreq(str) { // Create an array to store counts. The size // of array is limit+1 and all values are // initially 0 let count= new Array(limit + 1); for(let i=0;i<count.length;i++) { count[i]=0; } // Traverse through string characters and // count frequencies for (let i = 0; i < str.length; i++) count[str[i].charCodeAt(0)]++; for (let i = 0; i <= limit; i++) { if (count[i] > 0) document.write(String.fromCharCode(i) + " " + count[i]+"<br>"); } } // Driver Code let str = "GeeksforGeeks"; countFreq(str); // This code is contributed by unknown2108 </script>
G 2 e 4 f 1 k 2 o 1 r 1 s 2
Medición de frecuencias cuando los elementos están en un rango limitado
Por ejemplo, considere una string que contiene solo letras mayúsculas. Los elementos de la string están limitados en el rango de ‘A’ a ‘Z’. La idea es restar el elemento más pequeño (‘A’ en este ejemplo) para obtener el índice del elemento.
C++
// C++ program to count frequencies of array items #include <bits/stdc++.h> using namespace std; const int limit = 25; void countFreq(string str) { // Create an array to store counts. The size // of array is limit+1 and all values are // initially 0 vector<int> count(limit+1, 0); // Traverse through string characters and // count frequencies for (int i = 0; i < str.length(); i++) count[str[i] - 'A']++; for (int i = 0; i <= limit; i++) if (count[i] > 0) cout << (char)(i + 'A') << " " << count[i] << endl; } int main() { string str = "GEEKSFORGEEKS"; countFreq(str); return 0; }
Java
// Java program to count frequencies // of array items import java.util.*; class GFG { static int limit = 25; static void countFreq(String str) { // Create an array to store counts. // The size of array is limit+1 and // all values are initially 0 int []count = new int[limit + 1]; // Traverse through string characters // and count frequencies for (int i = 0; i < str.length(); i++) count[str.charAt(i) - 'A']++; for (int i = 0; i <= limit; i++) if (count[i] > 0) System.out.println((char)(i + 'A') + " " + count[i]); } // Driver Code public static void main(String[] args) { String str = "GEEKSFORGEEKS"; countFreq(str); } } // This code is contributed by PrinciRaj1992
Python3
# Python3 program to count frequencies of array items limit = 25; def countFreq(str): # Create an array to store counts. The size # of array is limit+1 and all values are # initially 0 count = [0 for i in range(limit + 1)] # Traverse through string characters and # count frequencies for i in range(len(str)): count[ord(str[i]) - ord('A')] += 1 for i in range(limit + 1): if (count[i] > 0): print(chr(i + ord('A')), count[i]) # Driver code if __name__=='__main__': str = "GEEKSFORGEEKS"; countFreq(str); # This code is contributed by Pratham76
C#
// C# program to count frequencies // of array items using System; class GFG { static int limit = 25; static void countFreq(String str) { // Create an array to store counts. // The size of array is limit+1 and // all values are initially 0 int []count = new int[limit + 1]; // Traverse through string characters // and count frequencies for (int i = 0; i < str.Length; i++) count[str[i] - 'A']++; for (int i = 0; i <= limit; i++) if (count[i] > 0) Console.WriteLine((char)(i + 'A') + " " + count[i]); } // Driver Code public static void Main(String[] args) { String str = "GEEKSFORGEEKS"; countFreq(str); } } // This code contributed by PrinciRaj1992
Javascript
<script> // JavaScript program to count frequencies // of array items let limit = 25; function countFreq(str) { // Create an array to store counts. // The size of array is limit+1 and // all values are initially 0 let count = new Array(limit + 1); for(let i=0;i<limit+1;i++) { count[i]=0; } // Traverse through string characters // and count frequencies for (let i = 0; i < str.length; i++) count[str[i].charCodeAt(0) - 'A'.charCodeAt(0)]++; for (let i = 0; i <= limit; i++) if (count[i] > 0) document.write(String.fromCharCode(i + 'A'.charCodeAt(0)) + " " + count[i]+"<br>"); } // Driver Code let str = "GEEKSFORGEEKS"; countFreq(str); // This code is contributed by rag2127 </script>
E 4 F 1 G 2 K 2 O 1 R 1 S 2
Midiendo frecuencias si no hay rango ni límite
La idea es usar hash ( unordered_map en C++ y HashMap en Java) para obtener frecuencias.
C++
// C++ program to count frequencies of array items #include <bits/stdc++.h> using namespace std; void countFreq(int arr[], int n) { unordered_map<int, int> mp; // Traverse through array elements and // count frequencies for (int i = 0; i < n; i++) mp[arr[i]]++; // Traverse through map and print frequencies for (auto x : mp) cout << x.first << " " << x.second << endl; } int main() { int arr[] = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = sizeof(arr) / sizeof(arr[0]); countFreq(arr, n); return 0; }
Java
// Java program to count frequencies of array items import java.util.*; class GFG { static void countFreq(int arr[], int n) { HashMap<Integer, Integer>mp = new HashMap<Integer, Integer>(); // Traverse through array elements and // count frequencies for (int i = 0 ; i < n; i++) { if(mp.containsKey(arr[i])) { mp.put(arr[i], mp.get(arr[i]) + 1); } else { mp.put(arr[i], 1); } } // Traverse through map and print frequencies for (Map.Entry<Integer, Integer> entry : mp.entrySet()) System.out.println(entry.getKey() + " " + entry.getValue()); } // Driver Code public static void main(String[] args) { int arr[] = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = arr.length; countFreq(arr, n); } } // This code is contributed by 29AjayKumar
Python3
# Python3 program to count frequencies of array items def countFreq(arr, n): mp = {} # Traverse through array elements and # count frequencies for i in range(n): if arr[i] in mp: mp[arr[i]] += 1 else: mp[arr[i]] = 1 # Traverse through map and print frequencies for x in sorted(mp): print(x, mp[x]) # Driver Code arr = [ 10, 20, 20, 10, 10, 20, 5, 20 ] n = len(arr) countFreq(arr, n) # This code is contributed by divyesh072019
C#
// C# program to count frequencies of array items using System; using System.Collections.Generic; class GFG { static void countFreq(int []arr, int n) { Dictionary<int, int> mp = new Dictionary<int, int>(); // Traverse through array elements and // count frequencies for (int i = 0 ; i < n; i++) { if(mp.ContainsKey(arr[i])) { var val = mp[arr[i]]; mp.Remove(arr[i]); mp.Add(arr[i], val + 1); } else { mp.Add(arr[i], 1); } } // Traverse through map and print frequencies foreach(KeyValuePair<int, int> entry in mp) Console.WriteLine(entry.Key + " " + entry.Value); } // Driver Code public static void Main(String[] args) { int []arr = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = arr.Length; countFreq(arr, n); } } // This code is contributed by Princi Singh
Javascript
<script> // Javascript program to count frequencies of array items function countFreq(arr, n) { let mp = new Map(); // Traverse through array elements and // count frequencies for (let i = 0 ; i < n; i++) { if(mp.has(arr[i])) { mp.set(arr[i], mp.get(arr[i]) + 1); } else { mp.set(arr[i], 1); } } // Traverse through map and print frequencies for (let [key, value] of mp.entries()) document.write(key + " " + value+"<br>"); } // Driver Code let arr=[10, 20, 20, 10, 10, 20, 5, 20]; let n = arr.length; countFreq(arr, n); // This code is contributed by ab2127 </script>
5 1 10 3 20 4
Tiempo Complejidad : O(n)
Espacio Auxiliar : O(n)
En la solución eficiente anterior, ¿cómo imprimir elementos en el mismo orden en que aparecen en la entrada?
C++
// C++ program to count frequencies of array items #include <bits/stdc++.h> using namespace std; void countFreq(int arr[], int n) { unordered_map<int, int> mp; // Traverse through array elements and // count frequencies for (int i = 0; i < n; i++) mp[arr[i]]++; // To print elements according to first // occurrence, traverse array one more time // print frequencies of elements and mark // frequencies as -1 so that same element // is not printed multiple times. for (int i = 0; i < n; i++) { if (mp[arr[i]] != -1) { cout << arr[i] << " " << mp[arr[i]] << endl; mp[arr[i]] = -1; } } } int main() { int arr[] = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = sizeof(arr) / sizeof(arr[0]); countFreq(arr, n); return 0; }
Java
// Java program to count frequencies of array items import java.util.*; class GFG { static void countFreq(int arr[], int n) { HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>(); // Traverse through array elements and // count frequencies for (int i = 0 ; i < n; i++) { if(mp.containsKey(arr[i])) { mp.put(arr[i], mp.get(arr[i]) + 1); } else { mp.put(arr[i], 1); } } // To print elements according to first // occurrence, traverse array one more time // print frequencies of elements and mark // frequencies as -1 so that same element // is not printed multiple times. for (int i = 0; i < n; i++) { if (mp.get(arr[i]) != -1) { System.out.println(arr[i] + " " + mp.get(arr[i])); mp. put(arr[i], -1); } } } // Driver Code public static void main(String[] args) { int arr[] = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = arr.length; countFreq(arr, n); } } // This code is contributed by Princi Singh
Python3
# Python3 program to count frequencies of array items def countFreq(arr, n): mp = {} # Traverse through array elements and # count frequencies for i in range(n): if arr[i] not in mp: mp[arr[i]] = 1 else: mp[arr[i]] += 1 # To print elements according to first # occurrence, traverse array one more time # print frequencies of elements and mark # frequencies as -1 so that same element # is not printed multiple times. for i in range(n): if(mp[arr[i]] != -1): print(arr[i], mp[arr[i]]) mp[arr[i]] = -1 # Driver code arr = [10, 20, 20, 10, 10, 20, 5, 20 ] n = len(arr) countFreq(arr, n) # This code is contributed by rag2127
C#
// C# program to count frequencies of array items using System; using System.Collections.Generic; class GFG { static void countFreq(int []arr, int n) { Dictionary<int, int> mp = new Dictionary<int, int>(); // Traverse through array elements and // count frequencies for (int i = 0 ; i < n; i++) { if(mp.ContainsKey(arr[i])) { mp[arr[i]] = mp[arr[i]] + 1; } else { mp.Add(arr[i], 1); } } // To print elements according to first // occurrence, traverse array one more time // print frequencies of elements and mark // frequencies as -1 so that same element // is not printed multiple times. for (int i = 0; i < n; i++) { if (mp[arr[i]] != -1) { Console.WriteLine(arr[i] + " " + mp[arr[i]]); mp[arr[i]] = - 1; } } } // Driver Code public static void Main(String[] args) { int []arr = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = arr.Length; countFreq(arr, n); } } // This code is contributed by Rajput-Ji
Javascript
<script> // Javascript program to count // frequencies of array items function countFreq(arr, n) { let mp = new Map(); // Traverse through array elements and // count frequencies for(let i = 0 ; i < n; i++) { if (mp.has(arr[i])) { mp.set(arr[i], mp.get(arr[i]) + 1); } else { mp.set(arr[i], 1); } } // To print elements according to first // occurrence, traverse array one more time // print frequencies of elements and mark // frequencies as -1 so that same element // is not printed multiple times. for(let i = 0; i < n; i++) { if (mp.get(arr[i]) != -1) { document.write(arr[i] + " " + mp.get(arr[i]) + "<br>"); mp.set(arr[i], -1); } } } // Driver Code let arr = [ 10, 20, 20, 10, 10, 20, 5, 20 ]; let n = arr.length; countFreq(arr, n); // This code is contributed by patel2127 </script>
10 3 20 4 5 1
Tiempo Complejidad : O(n)
Espacio Auxiliar : O(n)
En Java, podemos obtener elementos en el mismo orden usando LinkedHashMap . Por lo tanto, no necesitamos un bucle adicional.
Muchos problemas se basan en la medición de la frecuencia y serán pan comido si sabemos cómo calcular la frecuencia de varios elementos en una array determinada. Por ejemplo, intente los siguientes problemas que se basan en la medición de frecuencia:
Este artículo es una contribución de Aditya Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA