Count pairs from an array having product of their sum and difference equal to 0

• Difficulty Level : Easy
• Last Updated : 09 Apr, 2021

Given an array arr[] of size N, the task is to count possible pairs of array elements (arr[i], arr[j]) such that (arr[i] + arr[j]) * (arr[i] – arr[j]) is 0.

Examples:

Input: arr[] = {2, -2, 1, 1}
Output : 2
Explanation:
(arr[0] + arr[1]) * (arr[0] – arr[1]) = 0
(arr[3] + arr[4]) * (arr[3] – arr[4]) = 0

Input: arr[] = {5, 9, -9, -9}
Output : 3

Approach: It can be observed that the equation (arr[i] + arr[j]) * (arr[i] – arr[j]) = 0 can be reduced to arr[i]2 = arr[j]2. Therefore, the task reduces to counting pairs having absolute value equal. Follow the steps below to solve the problem:

• Initialize an array hash[] to store the frequency of the absolute value of each array element.
• Calculate the count of pairs by adding (hash[x] * (hash[x] – 1))/ 2 for every array distinct absolute values.

Below is the implementation of the above approach:

C++14

 `// C++ program for the above approach``#include ``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

 ``

Output:

`2`

Time Complexity: O(N)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up