Count the pairs in an array such that the difference between them and their indices is equal - GeeksforGeeks

19 Mar, 2022
Given an array arr[] of size N, the task is to count the number of pairs (arr[i], arr[j]) such that arr[j] – arr[i] = j – i.Examples:  
Input: arr[] = {5, 2, 7} Output: 1 The only valid pair is (arr[0], arr[2]) as 7 – 5 = 2 – 0 = 2.Input: arr[] = {1, 2, 3, 4} Output: 6  
Approach: A pair (arr[i], arr[j]) is said to be valid if (arr[j] – arr[i]) = (j – i), it can also be written as (arr[j] – j) = (arr[i] – i) which is the difference of the element with its index. Now, the task is to divide the array into groups such that every group has equal difference of the element with its index then for every group if it has N elements, the count of possible pairs will be (N * (N – 1)) / 2.Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to return the count// of all valid pairsint countPairs(int arr[], int n){     // To store the frequencies    // of (arr[i] - i)    unordered_map<int, int> map;    for (int i = 0; i < n; i++)        map[arr[i] - i]++;     // To store the required count    int res = 0;    for (auto x : map) {        int cnt = x.second;         // If cnt is the number of elements        // whose difference with their index        // is same then ((cnt * (cnt - 1)) / 2)        // such pairs are possible        res += ((cnt * (cnt - 1)) / 2);    }     return res;} // Driver codeint main(){    int arr[] = { 1, 5, 6, 7, 9 };    int n = sizeof(arr) / sizeof(arr[0]);     cout << countPairs(arr, n);     return 0;}
// Java implementation of the approachimport java.util.HashMap; class GFG{         // Function to return the count    // of all valid pairs    static int countPairs(int arr[], int n)    {             // To store the frequencies        // of (arr[i] - i)        HashMap<Integer,                Integer> map = new HashMap<Integer,                                           Integer>();        for (int i = 0; i < n; i++)            map.put(arr[i] - i, 0);                 for (int i = 0; i < n; i++)            map.put(arr[i] - i, map.get(arr[i] - i) + 1);             // To store the required count        int res = 0;        for (int x : map.values())        {            int cnt = x;                 // If cnt is the number of elements            // whose difference with their index            // is same then ((cnt * (cnt - 1)) / 2)            // such pairs are possible            res += ((cnt * (cnt - 1)) / 2);        }             return res;    }         // Driver code    public static void main (String[] args)    {        int arr[] = { 1, 5, 6, 7, 9 };        int n = arr.length;             System.out.println(countPairs(arr, n));    }} // This code is contributed by AnkitRai01
# Python3 implementation of the approach # Function to return the count# of all valid pairsdef countPairs(arr, n):     # To store the frequencies    # of (arr[i] - i)    map = dict()    for i in range(n):        map[arr[i] - i] = map.get(arr[i] - i, 0) + 1     # To store the required count    res = 0    for x in map:        cnt = map[x]         # If cnt is the number of elements        # whose difference with their index        # is same then ((cnt * (cnt - 1)) / 2)        # such pairs are possible        res += ((cnt * (cnt - 1)) // 2)     return res # Driver codearr = [1, 5, 6, 7, 9]n = len(arr) print(countPairs(arr, n)) # This code is contributed by Mohit Kumar
// C# implementation of the approachusing System;using System.Collections.Generic;class GFG{         // Function to return the count    // of all valid pairs    static int countPairs(int []arr, int n)    {             // To store the frequencies        // of (arr[i] - i)        Dictionary<int,                   int> map = new Dictionary<int,                                             int>();        for (int i = 0; i < n; i++)            map[arr[i] - i] = 0;                 for (int i = 0; i < n; i++)            map[arr[i] - i]++;             // To store the required count        int res = 0;        foreach(KeyValuePair<int, int> x in map)        {            int cnt = x.Value;                 // If cnt is the number of elements            // whose difference with their index            // is same then ((cnt * (cnt - 1)) / 2)            // such pairs are possible            res += ((cnt * (cnt - 1)) / 2);        }        return res;    }         // Driver code    public static void Main (String []args)    {        int []arr = { 1, 5, 6, 7, 9 };        int n = arr.Length;             Console.WriteLine(countPairs(arr, n));    }} // This code is contributed by Arnab Kundu
<script>      // JavaScript implementation of the approach      // Function to return the count      // of all valid pairs      function countPairs(arr, n) {        // To store the frequencies        // of (arr[i] - i)        var map = {};        for (var i = 0; i < n; i++) map[arr[i] - i] = 0;         for (var i = 0; i < n; i++) map[arr[i] - i]++;         // To store the required count        var res = 0;        for (const [key, value] of Object.entries(map)) {          var cnt = value;           // If cnt is the number of elements          // whose difference with their index          // is same then ((cnt * (cnt - 1)) / 2)          // such pairs are possible          res += (cnt * (cnt - 1)) / 2;        }        return res;      }       // Driver code      var arr = [1, 5, 6, 7, 9];      var n = arr.length;       document.write(countPairs(arr, n));    </script>
3
 
Time Complexity: O(n)
Auxiliary Space: O(n)
mohit kumar 29
ankthon
andrew1234
rdtank
varshagumber28
subham348
Arrays
Mathematical
Arrays
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Window Sliding Technique
Trapping Rain Water
Reversal algorithm for array rotation
Building Heap from Array
Program to find sum of elements in a given array
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7