Pairs Having Similar Elements

Given an array, A, having integers A1A2,...AN. Two elements of the array Aand  Aare called similar iff  Ai=Aj+or Aj=Ai+1. Also, the similarity follows transitivity. If 

Ai and Aj are similar and Aj and Ak are similar, then Ai and Ak are also similar. 
Note: ij, and k are all distinct.

You need to find the number of pairs of indices (i,j) such that i<j and Ai is similar to Aj.

Example:

Input:  n = 8, a = [1,3,5,7,8,2,5,7]
Output: 6

Approach

C++

#include <bits/stdc++.h>
using namespace std;

long long pairsHavingSimiElements(long long nlong long a[])
{

    sort(aa + n);
    long long cnt = 0ans = 0;
    long long y = 0i = 0;
    while (i < n)
    {
        if (i < n - 1 && a[i] + 1 == a[i + 1])
        {
            cnt++;
        }
        else if (i < n - 1 && a[i] == a[i + 1])
        {
            cnt++;
            y++;
        }
        else
        {
            if (y != cnt)
                ans += cnt * (cnt + 1) / 2;
            cnt = 0;
            y = 0;
        }
        i++;
    }
    return ans;
}
int main()
{

    long long n = 8;
    long long a[n] = {13578257};

    cout << pairsHavingSimiElements(na<< "\n";

    return 0;
}


No comments:

Post a Comment