Dada una array arr[] que consta de N enteros positivos, la tarea es encontrar el recuento de pares únicos (i, j) tales que la suma de arr[i] y el inverso (arr[j]) sea igual a la suma de reverse(arr[i]) y arr[j] .
Ejemplos:
Entrada: arr[] = {2, 15, 11, 7}
Salida: 3
Explicación:
Los pares son (0, 2), (0, 3) y (2, 3).
- (0, 2): arr[0] + reverse(arr[2]) (= 2 + 11 = 13) y reverse(arr[0]) + arr[2](= 2 + 11 = 13).
- (0, 3): arr[0] + reverse(arr[3]) (= 2 + 7 = 9) y reverse(arr[0]) + arr[3](= 2 + 7 = 9).
- (2, 3): arr[2] + reverse(arr[3]) (= 11 + 7 = 18) y reverse(arr[2]) + arr[3](= 11 + 7 = 18).
Entrada: A[] = {22, 115, 7, 313, 17, 23, 22}
Salida: 6
Enfoque ingenuo: el enfoque más simple es generar todos los pares posibles de la array dada y si algún par de elementos satisface las condiciones dadas, cuente estos pares. Después de completar los pasos anteriores, imprima el valor de count como resultado.
Complejidad de Tiempo: O(N 2 *log M), donde M es el elemento máximo en A[]
Espacio Auxiliar: O(1)
Enfoque eficiente: el enfoque anterior se puede optimizar utilizando la técnica Hashing y reescribiendo la ecuación como:
A[i] + inversa(A[j]) = inversa(A[i]) + A[j]
=> A[i] – inversa(A[i]) = A[j] – inversa(A[j ])
Ahora, la idea es contar la frecuencia de (A[i] – reverse(A[i])) para cada elemento arr[i] y luego contar el número posible de pares válidos que satisfacen la condición dada. Siga los pasos a continuación para resolver el problema:
- Mantenga un Hashmap , digamos u_map para almacenar el conteo de frecuencia de A[i] – reverse(A[i]) para cualquier índice i .
- Inicialice una variable pares para almacenar el número de pares que satisfacen la condición dada.
- Recorra la array dada A[] usando la variable i y realice las siguientes operaciones:
- Almacene la frecuencia de A[i] – reverse(A[i]) en val .
- Incrementar pares por val .
- Actualice la frecuencia de val en u_map .
- Después de completar los pasos anteriores, imprima el valor de los pares como resultado.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to find the // reverse of the number n int reverse(int n) { int temp = n, rev = 0, r; // Iterate until temp is 0 while (temp) { r = temp % 10; rev = rev * 10 + r; temp /= 10; } // Return the reversed number return rev; } // Function to count number of unique // pairs (i, j) from the array A[] // which satisfies the given condition void countPairs(int A[], int N) { // Store the frequency of keys // as A[i] - reverse(A[i]) unordered_map<int, int> u_map; // Stores count of desired pairs int pairs = 0; // Iterate the array A[] for (int i = 0; i < N; i++) { int val = A[i] - reverse(A[i]); // Add frequency of val // to the required answer pairs += u_map[val]; // Increment frequency of val u_map[val]++; } // Print the number of pairs cout << pairs; } // Driver Code int main() { int arr[] = { 2, 15, 11, 7 }; int N = sizeof(arr) / sizeof(arr[0]); // Function Call countPairs(arr, N); return 0; }
Java
// Java program for the above approach import java.io.*; import java.lang.*; import java.util.*; class GFG{ // Function to find the // reverse of the number n static int reverse(int n) { int temp = n, rev = 0, r; // Iterate until temp is 0 while (temp > 0) { r = temp % 10; rev = rev * 10 + r; temp /= 10; } // Return the reversed number return rev; } // Function to count number of unique // pairs (i, j) from the array A[] // which satisfies the given condition static void countPairs(int A[], int N) { // Store the frequency of keys // as A[i] - reverse(A[i]) HashMap<Integer, Integer> map = new HashMap<>(); // Stores count of desired pairs int pairs = 0; // Iterate the array A[] for(int i = 0; i < N; i++) { int val = A[i] - reverse(A[i]); // Add frequency of val // to the required answer pairs += map.getOrDefault(val, 0); // Increment frequency of val map.put(val, map.getOrDefault(val, 0) + 1); } // Print the number of pairs System.out.println(pairs); } // Driver Code public static void main(String[] args) { int arr[] = { 2, 15, 11, 7 }; int N = arr.length; // Function Call countPairs(arr, N); } } // This code is contributed by Kingash
Python3
# Python3 program for the above approach from collections import defaultdict # Function to find the # reverse of the number n def reverse(n): temp = n rev = 0 # Iterate until temp is 0 while (temp): r = temp % 10 rev = rev * 10 + r temp //= 10 # Return the reversed number return rev # Function to count number of unique # pairs (i, j) from the array A[] # which satisfies the given condition def countPairs(A, N): # Store the frequency of keys # as A[i] - reverse(A[i]) u_map = defaultdict(int) # Stores count of desired pairs pairs = 0 # Iterate the array A[] for i in range(N): val = A[i] - reverse(A[i]) # Add frequency of val # to the required answer pairs += u_map[val] # Increment frequency of val u_map[val] += 1 # Print the number of pairs print(pairs) # Driver Code if __name__ == "__main__": arr = [2, 15, 11, 7] N = len(arr) # Function Call countPairs(arr, N) # This code is contributed by chitranayal.
C#
// C# program for the above approach using System; using System.Collections.Generic; class GFG{ // Function to find the // reverse of the number n static int reverse(int n) { int temp = n, rev = 0, r; // Iterate until temp is 0 while (temp > 0) { r = temp % 10; rev = rev * 10 + r; temp /= 10; } // Return the reversed number return rev; } // Function to count number of unique // pairs (i, j) from the array A[] // which satisfies the given condition static void countPairs(int []A, int N) { // Store the frequency of keys // as A[i] - reverse(A[i]) Dictionary<int, int> u_map = new Dictionary<int, int>(); // Stores count of desired pairs int pairs = 0; // Iterate the array A[] for(int i = 0; i < N; i++) { int val = A[i] - reverse(A[i]); // Add frequency of val // to the required answer if (u_map.ContainsKey(val)) pairs += u_map[val]; // Increment frequency of val if (u_map.ContainsKey(val)) u_map[val]++; else u_map.Add(val, 1); } // Print the number of pairs Console.Write(pairs); } // Driver Code public static void Main() { int []arr = { 2, 15, 11, 7 }; int N = arr.Length; // Function Call countPairs(arr, N); } } // This code is contributed by SURENDRA_GANGWAR
Javascript
<script> // Javascript program for the above approach // Function to find the // reverse of the number n function reverse(n) { var temp = n, rev = 0, r; // Iterate until temp is 0 while (temp) { r = temp % 10; rev = rev * 10 + r; temp = parseInt(temp/10); } // Return the reversed number return rev; } // Function to count number of unique // pairs (i, j) from the array A[] // which satisfies the given condition function countPairs(A, N) { // Store the frequency of keys // as A[i] - reverse(A[i]) var u_map = new Map(); // Stores count of desired pairs var pairs = 0; // Iterate the array A[] for (var i = 0; i < N; i++) { var val = A[i] - reverse(A[i]); // Add frequency of val // to the required answer pairs += u_map.has(val)?u_map.get(val):0; // Increment frequency of val if(u_map.has(val)) u_map.set(val, u_map.get(val)+1) else u_map.set(val, 1) } // Print the number of pairs document.write( pairs); } // Driver Code var arr = [2, 15, 11, 7]; var N = arr.length; // Function Call countPairs(arr, N); // This code is contributed by itsok. </script>
3
Complejidad de tiempo: O(N*log M), donde M es el elemento más grande de la array .
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por ManikantaBandla y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA