Related Articles

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

• Difficulty Level : Expert
• Last Updated : 31 May, 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 element``int` `triplets(vector<``int``>arr)``{` `    ``// Dictionary to check a element is``    ``// present or not in array``    ``map<``int``, ``int``> 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 Code``int` `main()``{``    ``vector<``int``>arr = {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`

## Java

 `// Java implementation to find the``// Count the triplets in which sum``// of two elements is the third element``import` `java.io.*;``import` `java.util.ArrayList;``import` `java.util.Collections;``import` `java.util.HashSet;` `class` `GFG{``    ` `// Function to find the count the triplets``// in which sum of two elements is the third element``public` `static` `int` `triplets(ArrayList arr)``{``    ` `      ``// Dictionary to check a element is``       ``// present or not in array``    ``HashSet k = ``new` `HashSet<>();``    ` `      ``// List to check for``    ``// duplicates of Triplets``    ``HashSet> ssd = ``new` `HashSet<>();` `      ``// Set initial count to zero``    ``int` `count = ``0``;``  ` `    ``// Sort the array``    ``Collections.sort(arr);` `    ``int` `i = ``0``;` `      ``// Add all the values as key``    ``// value pairs to the dictionary``    ``while` `(i < arr.size())``    ``{``        ``if` `(!k.contains(arr.get(i)))``        ``{``            ``k.add(arr.get(i));``        ``}``        ``i += ``1``;``    ``}``    ``int` `j = ``0``;``    ` `    ``// Loop to choose two elements``    ``while` `(j < arr.size() - ``1``)``    ``{``        ``int` `q = j + ``1``;``        ` `          ``// Check for the sum and duplicate``        ``while` `(q < arr.size())``        ``{``            ``ArrayList trip = ``new` `ArrayList<>();``            ``trip.add(arr.get(j));``            ``trip.add(arr.get(q));``            ``trip.add(arr.get(j) + arr.get(q));``            ` `            ``if` `(k.contains(arr.get(j) + arr.get(q)) &&``                ``!ssd.contains(trip))``            ``{``                ``count += ``1``;``                ``ArrayList nums = ``new` `ArrayList<>();``                ``nums.add(arr.get(j));``                ``nums.add(arr.get(q));``                ``nums.add(arr.get(j) + arr.get(q));``                ``ssd.add(nums);``            ``}``            ``q += ``1``;``        ``}``        ``j += ``1``;``    ``}``    ``return` `count;``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``ArrayList arr = ``new` `ArrayList<>();``    ``arr.add(``7``);``    ``arr.add(``2``);``    ``arr.add(``5``);``    ``arr.add(``4``);``    ``arr.add(``3``);``    ``arr.add(``6``);``    ``arr.add(``1``);``    ``arr.add(``9``);``    ``arr.add(``10``);``    ``arr.add(``12``);``    ` `    ``int` `count = triplets(arr);``    ` `    ``System.out.println(count);``}``}` `// This code is contributed by aditya7409`

## 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 element``def` `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 Code``if` `__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 element``using` `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<``int``> arr)``  ``{` `    ``// Dictionary to check a element is``    ``// present or not in array``    ``Dictionary<``int``, ``int``> k = ``new` `Dictionary<``int``, ``int``>();``    ``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<``int``,``int``>(arr[j], arr[q])) &&``            ``mpp[``new` `Tuple<``int``,``int``>(arr[j], arr[q])] != (arr[j] + arr[q]))``        ``{``          ``count += 1;   ``          ``ssd.Add(``new` `List<``int``>(``new` `int``[]{arr[j], arr[q], arr[j] + arr[q]}));``          ``mpp[``new` `Tuple<``int``,``int``>(arr[j], arr[q])] = arr[j] + arr[q];``        ``}``        ``else``{``          ``count += 1;``          ``ssd.Add(``new` `List<``int``>(``new` `int``[]{arr[j], arr[q], arr[j] + arr[q]}));``          ``mpp[``new` `Tuple<``int``,``int``>(arr[j], arr[q])] = arr[j] + arr[q];``        ``}    ``        ``q += 1;``      ``}``      ``j += 1;``    ``}``    ``return` `count;``  ``}` `  ``// Driver code``  ``static` `void` `Main()``  ``{``    ``List<``int``> arr = ``new` `List<``int``>(``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`

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 experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up