Skip to content
Related Articles

Related Articles

Improve Article
Count the pairs in an array such that the difference between them and their indices is equal
  • Difficulty Level : Medium
  • Last Updated : 25 May, 2021

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:
The only valid pair is (arr[0], arr[2]) as 7 – 5 = 2 – 0 = 2.
Input: arr[] = {1, 2, 3, 4} 
Output:
 

 

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++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the count
// of all valid pairs
int 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 differecne with their index
        // is same then ((cnt * (cnt - 1)) / 2)
        // such pairs are possible
        res += ((cnt * (cnt - 1)) / 2);
    }
 
    return res;
}
 
// Driver code
int main()
{
    int arr[] = { 1, 5, 6, 7, 9 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    cout << countPairs(arr, n);
 
    return 0;
}

Java




// Java implementation of the approach
import 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 differecne 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




# Python3 implementation of the approach
 
# Function to return the count
# of all valid pairs
def 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 differecne with their index
        # is same then ((cnt * (cnt - 1)) / 2)
        # such pairs are possible
        res += ((cnt * (cnt - 1)) // 2)
 
    return res
 
# Driver code
arr = [1, 5, 6, 7, 9]
n = len(arr)
 
print(countPairs(arr, n))
 
# This code is contributed by Mohit Kumar

C#




// C# implementation of the approach
using 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 differecne 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

Javascript




<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 differecne 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>
Output: 
3

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes




My Personal Notes arrow_drop_up
Recommended Articles
Page :