Dada una array arr[] de tamaño N , la tarea es contar los posibles pares de elementos de la array (arr[i], arr[j]) tales que (arr[i] + arr[j]) * (arr[i] – arr[j]) es 0 .
Ejemplos:
Entrada: arr[] = {2, -2, 1, 1}
Salida: 2
Explicación:
(arr[0] + arr[1]) * (arr[0] – arr[1]) = 0
(arr[3 ] + arr[4]) * (arr[3] – arr[4]) = 0Entrada: arr[] = {5, 9, -9, -9}
Salida: 3
Planteamiento: Se puede observar que la ecuación (arr[i] + arr[j]) * (arr[i] – arr[j]) = 0 se puede reducir a arr[i] 2 = arr[j] 2 . Por lo tanto, la tarea se reduce a contar pares que tienen un valor absoluto igual. Siga los pasos a continuación para resolver el problema:
- Inicialice una array hash[] para almacenar la frecuencia del valor absoluto de cada elemento de la array.
- Calcule el recuento de pares agregando (hash[x] * (hash[x] – 1))/ 2 para cada array de valores absolutos distintos.
A continuación se muestra la implementación del enfoque anterior:
C++14
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; #define MAXN 100005 // Function to count required // number of pairs int countPairs(int arr[], int N) { // Stores count of pairs int desiredPairs = 0; // Initialize hash with 0 int hash[MAXN] = { 0 }; // Count frequency of each element for (int i = 0; i < N; i++) { hash[abs(arr[i])]++; } // Calculate desired number of pairs for (int i = 0; i < MAXN; i++) { desiredPairs += ((hash[i]) * (hash[i] - 1)) / 2; } // Print desired pairs cout << desiredPairs; } // Driver Code int main() { // Given arr[] int arr[] = { 2, -2, 1, 1 }; // Size of the array 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.util.Arrays; class GFG{ static int MAXN = 100005; // Function to count required // number of pairs static void countPairs(int arr[], int N) { // Stores count of pairs int desiredPairs = 0; // Initialize hash with 0 int hash[] = new int[MAXN]; Arrays.fill(hash, 0); // Count frequency of each element for(int i = 0; i < N; i++) { hash[Math.abs(arr[i])]++; } // Calculate desired number of pairs for(int i = 0; i < MAXN; i++) { desiredPairs += ((hash[i]) * (hash[i] - 1)) / 2; } // Print desired pairs System.out.print(desiredPairs); } // Driver Code public static void main (String[] args) { // Given arr[] int arr[] = { 2, -2, 1, 1 }; // Size of the array int N = arr.length; // Function call countPairs(arr, N); } } // This code is contributed by code_hunt
Python3
# Python3 program for # the above approach MAXN = 100005 # Function to count required # number of pairs def countPairs(arr, N): # Stores count of pairs desiredPairs = 0 # Initialize hash with 0 hash = [0] * MAXN # Count frequency of # each element for i in range(N): hash[abs(arr[i])] += 1 # Calculate desired number # of pairs for i in range(MAXN): desiredPairs += ((hash[i]) * (hash[i] - 1)) // 2 # Print desired pairs print (desiredPairs) # Driver Code if __name__ == "__main__": # Given arr[] arr = [2, -2, 1, 1] # Size of the array N = len(arr) # Function Call countPairs(arr, N) # This code is contributed by Chitranayal
C#
// C# program for the above approach using System; class GFG{ static int MAXN = 100005; // Function to count required // number of pairs static void countPairs(int []arr, int N) { // Stores count of pairs int desiredPairs = 0; // Initialize hash with 0 int []hash = new int[MAXN]; // Count frequency of each element for(int i = 0; i < N; i++) { hash[Math.Abs(arr[i])]++; } // Calculate desired number of pairs for(int i = 0; i < MAXN; i++) { desiredPairs += ((hash[i]) * (hash[i] - 1)) / 2; } // Print desired pairs Console.Write(desiredPairs); } // Driver Code public static void Main(String[] args) { // Given []arr int []arr = { 2, -2, 1, 1 }; // Size of the array int N = arr.Length; // Function call countPairs(arr, N); } } // This code is contributed by Amit Katiyar
Javascript
<script> // Javascript program for the above approach // Function to count required // number of pairs function countPairs(arr, N) { // Stores count of pairs let desiredPairs = 0; // Initialize hash with 0 let hash = new Uint8Array(9100005); // Count frequency of each element for (let i = 0; i < N; i++) { hash[Math.abs(arr[i])]++; } // Calculate desired number of pairs for (let i = 0; i < 9100005; i++) { desiredPairs += ((hash[i]) * (hash[i] - 1)) / 2; } // Print desired pairs document.write(desiredPairs); } // Driver Code // Given arr[] let arr = [2, -2, 1, 1]; // Size of the array let N = arr.length; // Function Call countPairs(arr, N); // This code is contributed by Mayank Tyagi </script>
Producción:
2
Complejidad temporal: O(N)
Espacio auxiliar: O(N)