Count of triplets from the given Array such that sum of any two elements is the third element

• Difficulty Level : Expert
• Last Updated : 03 Nov, 2021

Given an unsorted array arr, the task is to find the count of the distinct triplets in which the sum of any two elements is the third element.

Examples:

Input: arr[] = {1, 3, 4, 15, 19}
Output:
Explanation:
In the given array there are two triplets such that the sum of the two elements is equal to the third element: {{1, 3, 4}, {4, 15, 19}}

Input: arr[] = {7, 2, 5, 4, 3, 6, 1, 9, 10, 12}
Output: 18

Approach:

• Sort the given array
• Create a Hash map for the array to check that a particular element is present or not.
• Iterate over the Array with two Loops to select any two elements at different positions and check that the sum of those two elements is present in the hash map in O(1) time.
• If the sum of the two elements is present in the hash map, then increment the count of the triplets.

Below is the implementation of the above approach:

C++

 // C++ Implementation to find the// Count the triplets in which sum// of two elements is the third element#include  using namespace std; // Function to find the count// the triplets in which sum// of two elements is the third elementint triplets(vectorarr){     // Dictionary to check a element is    // present or not in array    map k;    map, int> mpp;     // List to check for    // duplicates of Triplets    vector> ssd;     // Set initial count to zero    int count = 0;     // Sort the array    sort(arr.begin(),arr.end());     int i = 0;    while (i < arr.size())    {         // Add all the values as key        // value pairs to the dictionary        if (k.find(arr[i]) == k.end())            k[arr[i]] = 1;         i += 1;    }     // Loop to choose two elements    int j = 0;    while (j < arr.size() - 1)    {         int q = j + 1;        while (q < arr.size())        {             // Check for the sum and duplicate            if ( k.find(arr[j] + arr[q]) != k.end() and                mpp[{arr[j], arr[q]}] != arr[j] + arr[q])            {                 count += 1;                 ssd.push_back({arr[j], arr[q], arr[j] + arr[q]});                mpp[{arr[j], arr[q]}] = arr[j] + arr[q];            }             q += 1;        }        j += 1;    }    return count;}  // Driver Codeint main(){    vectorarr = {7, 2, 5, 4, 3, 6, 1, 9, 10, 12};    int count = triplets(arr);    printf("%d",count);    return 0;} // This code is contributed by mohit kumar 29

Python3

 # Python3 Implementation to find the# Count the triplets in which sum# of two elements is the third element # Function to find the count# the triplets in which sum# of two elements is the third elementdef triplets(arr):     # Dictionary to check a element is    # present or not in array    k = set()         # List to check for    # duplicates of Triplets    ssd = []         # Set initial count to zero    count = 0     # Sort the array    arr.sort()     i = 0    while i < len(arr):                 # Add all the values as key        # value pairs to the dictionary        if arr[i] not in k:            k.add(arr[i])         i += 1     # Loop to choose two elements    j = 0    while j < len(arr) - 1:         q = j + 1        while q < len(arr):             # Check for the sum and duplicate            if arr[j] + arr[q] in k and\               [arr[j], arr[q], arr[j] + arr[q]] not in ssd:                 count += 1                 ssd.append([arr[j], arr[q], arr[j] + arr[q]])             q += 1        j += 1     return count  # Driver Codeif __name__ == "__main__":    arr = [7, 2, 5, 4, 3, 6, 1, 9, 10, 12]    count = triplets(arr)    print(count)

C#

 // C# Implementation to find the// Count the triplets in which sum// of two elements is the third elementusing System;using System.Collections.Generic;class GFG {   // Function to find the count  // the triplets in which sum  // of two elements is the third element  static int triplets(List arr)  {     // Dictionary to check a element is    // present or not in array    Dictionary k = new Dictionary();    Dictionary, int> mpp = new Dictionary, int>();     // List to check for    // duplicates of Triplets    List> ssd = new List>();     // Set initial count to zero    int count = 0;     // Sort the array    arr.Sort();     int i = 0;    while (i < arr.Count)    {       // Add all the values as key      // value pairs to the dictionary      if (!k.ContainsKey(arr[i]))        k[arr[i]] = 1;       i += 1;    }     // Loop to choose two elements    int j = 0;    while (j < arr.Count - 1)    {      int q = j + 1;      while (q < arr.Count)      {         // Check for the sum and duplicate        if(!k.ContainsKey(arr[j] + arr[q]))        {          q += 1;          continue;        }        if (mpp.ContainsKey(new Tuple(arr[j], arr[q])) &&            mpp[new Tuple(arr[j], arr[q])] != (arr[j] + arr[q]))        {          count += 1;             ssd.Add(new List(new int[]{arr[j], arr[q], arr[j] + arr[q]}));          mpp[new Tuple(arr[j], arr[q])] = arr[j] + arr[q];        }        else{          count += 1;          ssd.Add(new List(new int[]{arr[j], arr[q], arr[j] + arr[q]}));          mpp[new Tuple(arr[j], arr[q])] = arr[j] + arr[q];        }            q += 1;      }      j += 1;    }    return count;  }   // Driver code  static void Main()  {    List arr = new List(new int[]{7, 2, 5, 4, 3, 6, 1, 9, 10, 12});    int count = triplets(arr);    Console.Write(count);  }} // This code is contributed by divyeshrabadiya07

Javascript


Output:
18

Time Complexity: O(N2*logN)

Auxiliary Space: O(3*N2)

My Personal Notes arrow_drop_up