Dada una array arr[] de N enteros. Para cada elemento de la array, la tarea es contar los posibles pares (i, j), excluyendo el elemento actual, de modo que i < j y arr[i] = arr[j] .
Ejemplos:
Entrada: arr[] = {1, 1, 2, 1, 2}
Salida: 2 2 3 2 3
Explicación:
para el índice 1, los elementos restantes después de excluir el elemento actual son [1, 2, 1, 2]. Entonces, el conteo es 2.
Para el índice 2, los elementos restantes después de excluir el elemento en el índice 2 son [1, 2, 1, 2]. Entonces, el conteo es 2.
Para el índice 3, los elementos restantes después de excluir el elemento en el índice 3 son [1, 1, 1, 2]. Entonces, el conteo es 3.
Para el índice 4, los elementos restantes después de excluir el elemento en el índice 4 son [1, 1, 2, 2]. Entonces, el conteo es 2.
Para el índice 5, los elementos restantes después de excluir el elemento en el índice 5 son [1, 1, 2, 1. Entonces, el conteo es 3.Entrada: arr[] = {1, 2, 3, 4}
Salida: 0 0 0 0
Explicación:
Dado que todos los elementos son distintos, no existe ningún par con el mismo valor.
Enfoque ingenuo: la idea ingenua es atravesar la array dada y, para cada elemento, excluir el elemento actual de la array y, con los elementos restantes de la array, encontrar todos los pares posibles (i, j) de modo que arr[i] sea igual a arr[ j] y yo < j . Imprime el conteo de pares para cada elemento.
Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(N)
Enfoque eficiente: la idea es almacenar la frecuencia de cada elemento y contar todos los pares posibles (por ejemplo, cnt ) con las condiciones dadas. Después de los pasos anteriores para cada elemento, elimine el conteo de pares posibles iguales del conteo total e imprima ese valor. Siga los pasos a continuación para resolver el problema:
- Almacena la frecuencia de cada elemento en Map .
- Crea una variable para almacenar la contribución de cada elemento.
- La contribución de algún número x se puede calcular como freq[x]*(freq[x] – 1) dividido por 2 , donde freq[x] es la frecuencia de x .
- Recorra la array dada y elimine la contribución de cada elemento del recuento total y guárdelo en ans[] .
- Imprime todos los elementos almacenados en ans[] .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for // the above approach #include <bits/stdc++.h> #define int long long int using namespace std; // Function to print the required // count of pairs excluding the // current element void solve(int arr[], int n) { // Store the frequency unordered_map<int, int> mp; for (int i = 0; i < n; i++) { mp[arr[i]]++; } // Find all the count int cnt = 0; for (auto x : mp) { cnt += ((x.second) * (x.second - 1) / 2); } int ans[n]; // Delete the contribution of // each element for equal pairs for (int i = 0; i < n; i++) { ans[i] = cnt - (mp[arr[i]] - 1); } // Print the answer for (int i = 0; i < n; i++) { cout << ans[i] << " "; } } // Driver Code int32_t main() { // Given array arr[] int arr[] = { 1, 1, 2, 1, 2 }; int N = sizeof(arr) / sizeof(arr[0]); // Function Call solve(arr, N); return 0; }
Java
// Java program for // the above approach import java.util.*; class GFG{ // Function to print the required // count of pairs excluding the // current element static void solve(int arr[], int n) { // Store the frequency HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>(); 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); } } // Find all the count int cnt = 0; for (Map.Entry<Integer, Integer> x : mp.entrySet()) { cnt += ((x.getValue()) * (x.getValue() - 1) / 2); } int []ans = new int[n]; // Delete the contribution of // each element for equal pairs for (int i = 0; i < n; i++) { ans[i] = cnt - (mp.get(arr[i]) - 1); } // Print the answer for (int i = 0; i < n; i++) { System.out.print(ans[i] + " "); } } // Driver Code public static void main(String[] args) { // Given array arr[] int arr[] = {1, 1, 2, 1, 2}; int N = arr.length; // Function Call solve(arr, N); } } // This code is contributed by 29AjayKumar
Python3
# Python3 program for # the above approach # Function to print required # count of pairs excluding the # current element def solve(arr, n): # Store the frequency mp = {} for i in arr: mp[i] = mp.get(i, 0) + 1 # Find all the count cnt = 0 for x in mp: cnt += ((mp[x]) * (mp[x] - 1) // 2) ans = [0] * n # Delete the contribution of # each element for equal pairs for i in range(n): ans[i] = cnt - (mp[arr[i]] - 1) # Print the answer for i in ans: print(i, end = " ") # Driver Code if __name__ == '__main__': # Given array arr[] arr = [1, 1, 2, 1, 2] N = len(arr) # Function call solve(arr, N) # This code is contributed by mohit kumar 29
C#
// C# program for // the above approach using System; using System.Collections.Generic; class GFG{ // Function to print the required // count of pairs excluding the // current element static void solve(int []arr, int n) { // Store the frequency Dictionary<int, int> mp = new Dictionary<int, int>(); 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); } } // Find all the count int cnt = 0; foreach (KeyValuePair<int, int> x in mp) { cnt += ((x.Value) * (x.Value - 1) / 2); } int []ans = new int[n]; // Delete the contribution of // each element for equal pairs for (int i = 0; i < n; i++) { ans[i] = cnt - (mp[arr[i]] - 1); } // Print the answer for (int i = 0; i < n; i++) { Console.Write(ans[i] + " "); } } // Driver Code public static void Main(String[] args) { // Given array []arr int []arr = {1, 1, 2, 1, 2}; int N = arr.Length; // Function Call solve(arr, N); } } // This code is contributed by 29AjayKumar
Javascript
<script> // Javascript program for // the above approach // Function to print the required // count of pairs excluding the // current element function solve(arr, n) { // Store the frequency var mp = new Map(); for (var 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); } // Find all the count var cnt = 0; mp.forEach((value, key) => { cnt += ((value) * (value - 1) / 2); }); var ans = Array(n); // Delete the contribution of // each element for equal pairs for (var i = 0; i < n; i++) { ans[i] = cnt - (mp.get(arr[i]) - 1); } // Print the answer for (var i = 0; i < n; i++) { document.write( ans[i] + " "); } } // Driver Code // Given array arr[] var arr = [1, 1, 2, 1, 2]; var N = arr.length; // Function Call solve(arr, N); </script>
2 2 3 2 3
Complejidad temporal: O(NlogN)
Espacio auxiliar: O(N)