Saturday, December 28, 2024
Google search engine
HomeData Modelling & AICount the pairs in an array such that the difference between them...

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

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




# 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 difference 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 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


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


Output: 

3

 

Time Complexity: O(n)

Auxiliary Space: O(n)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments