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

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

Examples:

Input: arr[] = {1, 3, 4, 15, 19}
Output: 2
Explanation:
In the given array there are two triplets such that sum of the any two element 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 sum of those two elements is present in the hash map in O(1) time.
  • If the Sum of the two element is present in the hash map then increment the count of the triplets.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Implementation to find the
// Count the triplets in which sum
// of two elements is the third element
#include <bits/stdc++.h>
  
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<pair<int, int>, int> mpp;
  
    // List to check for
    // duplicates of Triplets
    vector<vector<int >> 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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.




My Personal Notes arrow_drop_up

Recommended Posts:


Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : mohit kumar 29