Count of pairs having each element equal to index of the other from an Array

• Difficulty Level : Easy
• Last Updated : 25 Jan, 2023

Given an integer N and an array arr[] that contains elements in the range [1, N], the task is to find the count of all pairs (arr[i], arr[j]) such that i < j and i == arr[j] and j == arr[i].

Examples:

Input: N = 4, arr[] = {2, 1, 4, 3}
Output:
Explanation:
All possible pairs are {1, 2} and {3, 4}

Input: N = 5, arr[] = {5, 5, 5, 5, 1}
Output:
Explanation:
Only possible pair: {1, 5}

Naive Approach:
The simplest approach is to generate all possible pairs of the given array and if any pair satisfies the given condition, increase count. Finally, print the value of count

C++

 `// C++ program to implement``// the above approach``#include ``using` `namespace` `std;` `// Function to print the count of pair``void` `countPairs(``int` `N, ``int` `arr[])``{``    ``int` `count = 0;` `    ``// Iterate over all the``    ``// elements of the array``    ``for` `(``int` `i = 0; i < N - 1; i++) {``        ``for` `(``int` `j = i + 1; j < N; j++) {``            ``if` `((i + 1) == arr[j] && (j + 1) == arr[i])``                ``count++;``        ``}``    ``}` `    ``// Print the result``    ``cout << count << endl;``}` `// Driver Code``int` `main()``{``    ``int` `arr[] = { 5, 5, 5, 5, 1 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);` `    ``countPairs(N, arr);``}`

Java

 `import` `java.util.Arrays;` `public` `class` `Gfg {``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int``[] arr = { ``5``, ``5``, ``5``, ``5``, ``1` `};``        ``int` `N = arr.length;``        ``int` `count = ``0``;` `        ``// Iterate over all the``        ``// elements of the array``        ``for` `(``int` `i = ``0``; i < N - ``1``; i++) {``            ``for` `(``int` `j = i + ``1``; j < N; j++) {``                ``if` `((i + ``1``) == arr[j] && (j + ``1``) == arr[i])``                    ``count++;``            ``}``        ``}``        ``// Print the result``        ``System.out.println(count);``    ``}``}`

Python3

 `def` `countPairs(N, arr):``    ``count ``=` `0``    ``# Iterate over all the``    ``# elements of the array``    ``for` `i ``in` `range``(N``-``1``):``        ``for` `j ``in` `range``(i``+``1``, N):``            ``if` `(i ``+` `1``) ``=``=` `arr[j] ``and` `(j ``+` `1``) ``=``=` `arr[i]:``                ``count ``+``=` `1` `    ``# Print the result``    ``print``(count)` `# Driver code``if` `__name__ ``=``=` `"__main__"``:``    ``arr ``=` `[``5``, ``5``, ``5``, ``5``, ``1``]``    ``N ``=` `len``(arr)``    ``countPairs(N, arr)`

C#

 `using` `System;` `class` `Gfg``{``    ``public` `static` `void` `Main(``string``[] args)``    ``{``        ``int``[] arr = { 5, 5, 5, 5, 1 };``        ``int` `N = arr.Length;``        ``int` `count = 0;` `        ``// Iterate over all the``        ``// elements of the array``        ``for` `(``int` `i = 0; i < N - 1; i++)``        ``{``            ``for` `(``int` `j = i + 1; j < N; j++)``            ``{``                ``if` `((i + 1) == arr[j] && (j + 1) == arr[i])``                    ``count++;``            ``}``        ``}``        ``// Print the result``        ``Console.WriteLine(count);``    ``}``}`

Javascript

 `// Javascript program to implement``// the above approach` `// Function to print the count of pair``function` `countPairs(N, arr)``{``    ``let count = 0;` `    ``// Iterate over all the``    ``// elements of the array``    ``for` `(let i = 0; i < N - 1; i++) {``        ``for` `(let j = i + 1; j < N; j++) {``            ``if` `((i + 1) == arr[j] && (j + 1) == arr[i])``                ``count++;``        ``}``    ``}` `    ``// Print the result``    ``console.log(count);``}` `// Driver Code``let arr = [ 5, 5, 5, 5, 1 ];``let N = arr.length;` `countPairs(N, arr);` `// This code is contributed by agrawalpoojaa976.`

Output

`1`

Time Complexity: O(N2
Auxiliary Space: O(1)

Efficient Approach:
Follow the steps below to solve the above approach:

• Traverse the given array and keep the count of elements(say cnt) whose index equals to arr[arr[index] – 1] – 1. This will count the valid pair with the given criteria.
• After traversal, the total count is given by cnt/2 as we have count every pair twice in the above traversal.

Below is the implementation of the above approach:

C++

 `// C++ program to implement``// the above approach``#include``using` `namespace` `std;` `// Function to print the count of pair``void` `countPairs(``int` `N, ``int` `arr[])``{``    ``int` `count = 0;` `    ``// Iterate over all the``    ``// elements of the array``    ``for``(``int` `i = 0; i < N; i++)``    ``{``        ``if` `(i == arr[arr[i] - 1] - 1)``        ``{``            ` `            ``// Increment the count``            ``count++;``        ``}``    ``}` `    ``// Print the result``    ``cout << (count / 2) << endl;``}` `// Driver Code``int` `main()``{``    ``int` `arr[] = { 2, 1, 4, 3 };``    ``int` `N = ``sizeof``(arr)/``sizeof``(arr[0]);` `    ``countPairs(N, arr);``}` `// This code is contributed by Amit Katiyar`

Java

 `// Java Program to implement``// the above approach``import` `java.util.*;` `class` `GFG {` `    ``// Function to print the count of pair``    ``static` `void` `countPairs(``int` `N, ``int``[] arr)``    ``{``        ``int` `count = ``0``;` `        ``// Iterate over all the``        ``// elements of the array``        ``for` `(``int` `i = ``0``; i < N; i++) {` `            ``if` `(i == arr[arr[i] - ``1``] - ``1``) {` `                ``// Increment the count``                ``count++;``            ``}``        ``}` `        ``// Print the result``        ``System.out.println(count / ``2``);``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int``[] arr = { ``2``, ``1``, ``4``, ``3` `};``        ``int` `N = arr.length;` `        ``countPairs(N, arr);``    ``}``}`

Python3

 `# Python3 program to implement``# the above approach``# Function to print the count of pair``def` `countPairs(N, arr):` `    ``count ``=` `0` `    ``# Iterate over all the``    ``# elements of the array``    ``for` `i ``in` `range``(N):``        ``if` `(i ``=``=` `arr[arr[i] ``-` `1``] ``-` `1``):``       ` `            ``# Increment the count``            ``count ``+``=` `1` `    ``# Print the result``    ``print``(count ``/``/` `2``)` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``  ` `    ``arr ``=` `[``2``, ``1``, ``4``, ``3``]``    ``N ``=` `len``(arr)``    ``countPairs(N, arr)` `# This code is contributed by Chitranayal`

C#

 `// C# Program to implement``// the above approach``using` `System;``class` `GFG{`` ` `  ``// Function to print the count of pair``  ``static` `void` `countPairs(``int` `N, ``int``[] arr)``  ``{``    ``int` `count = 0;` `    ``// Iterate over all the``    ``// elements of the array``    ``for` `(``int` `i = 0; i < N; i++)``    ``{``      ``if` `(i == arr[arr[i] - 1] - 1)``      ``{` `        ``// Increment the count``        ``count++;``      ``}``    ``}` `    ``// Print the result``    ``Console.Write(count / 2);``  ``}` `  ``// Driver Code``  ``public` `static` `void` `Main(``string``[] args)``  ``{``    ``int``[] arr = { 2, 1, 4, 3 };``    ``int` `N = arr.Length;` `    ``countPairs(N, arr);``  ``}``}` `// This code is contributed by Ritik Bansal`

Javascript

 ``

Output

`2`

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

My Personal Notes arrow_drop_up