Find three element from different three arrays such that a + b + c = sum

07 Jul, 2022
Given three integer arrays and a “sum”, the task is to check if there are three elements a, b, c such that a + b + c = sum and a, b and c belong to three different arrays. 
Examples : 
Input : a1[] = { 1 , 2 , 3 , 4 , 5 };
    a2[] = { 2 , 3 , 6 , 1 , 2 };
    a3[] = { 3 , 2 , 4 , 5 , 6 };  
        sum = 9
Output : Yes
1  + 2  + 6 = 9  here 1 from a1[] and 2 from
a2[] and 6 from a3[]   
    
Input : a1[] = { 1 , 2 , 3 , 4 , 5 };
    a2[] = { 2 , 3 , 6 , 1 , 2 };
    a3[] = { 3 , 2 , 4 , 5 , 6 };   
         sum = 20 
Output : No 
A naive approach is to run three loops and check sum of three element form different arrays equal to given number if find then print exist and otherwise print not exist.  
Implementation:
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find three element// from different three arrays such// that a + b + c is equal to// given sum#include<bits/stdc++.h>using namespace std; // Function to check if there is// an element from each array such// that sum of the three elements// is equal to given sum.bool findTriplet(int a1[], int a2[],                 int a3[], int n1,                 int n2, int n3, int sum){    for (int i = 0; i < n1; i++)    for (int j = 0; j < n2; j++)        for (int k = 0; k < n3; k++)            if (a1[i] + a2[j] + a3[k] == sum)            return true;     return false;} // Driver Codeint main(){    int a1[] = { 1 , 2 , 3 , 4 , 5 };    int a2[] = { 2 , 3 , 6 , 1 , 2 };    int a3[] = { 3 , 2 , 4 , 5 , 6 };    int sum = 9;    int n1 = sizeof(a1) / sizeof(a1[0]);    int n2 = sizeof(a2) / sizeof(a2[0]);    int n3 = sizeof(a3) / sizeof(a3[0]);    findTriplet(a1, a2, a3, n1, n2, n3, sum)?                cout << "Yes" : cout << "No";    return 0;}
// Java program to find three element// from different three arrays such// that a + b + c is equal to// given sumclass GFG{             // Function to check if there is    // an element from each array such    // that sum of the three elements    // is equal to given sum.    static boolean findTriplet(int a1[], int a2[],                               int a3[], int n1,                               int n2, int n3, int sum)    {        for (int i = 0; i < n1; i++)            for (int j = 0; j < n2; j++)                for (int k = 0; k < n3; k++)                    if (a1[i] + a2[j] + a3[k] == sum)                    return true;             return false;    }         // Driver code    public static void main (String[] args)    {        int a1[] = { 1 , 2 , 3 , 4 , 5 };        int a2[] = { 2 , 3 , 6 , 1 , 2 };        int a3[] = { 3 , 2 , 4 , 5 , 6 };        int sum = 9;                 int n1 = a1.length;        int n2 = a2.length;        int n3 = a3.length;                 if(findTriplet(a1, a2, a3, n1, n2, n3, sum))            System.out.print("Yes");        else            System.out.print("No");    }} // This code is contributed by Anant Agarwal.
# Python3 program to find# three element from different# three arrays such that# a + b + c is equal to# given sum # Function to check if there# is an element from each# array such that sum of the# three elements is equal to# given sum.def findTriplet(a1, a2, a3,                n1, n2, n3, sum):     for i in range(0 , n1):        for j in range(0 , n2):            for k in range(0 , n3):                if (a1[i] + a2[j] +                    a3[k] == sum):                    return True     return False # Driver Codea1 = [ 1 , 2 , 3 , 4 , 5 ]a2 = [ 2 , 3 , 6 , 1 , 2 ]a3 = [ 3 , 2 , 4 , 5 , 6 ]sum = 9n1 = len(a1)n2 = len(a2)n3 = len(a3)print("Yes") if findTriplet(a1, a2, a3,                            n1, n2, n3,                            sum) else print("No") # This code is contributed# by Smitha
// C# program to find three element// from different three arrays such// that a + b + c is equal to// given sumusing System; public class GFG{ // Function to check if there is an// element from each array such that// sum of the three elements is// equal to given sum.static bool findTriplet(int []a1, int []a2,                        int []a3, int n1,                        int n2, int n3,                        int sum){         for (int i = 0; i < n1; i++)             for (int j = 0; j < n2; j++)                     for (int k = 0; k < n3; k++)            if (a1[i] + a2[j] + a3[k] == sum)            return true;     return false;}     // Driver Code    static public void Main ()    {        int []a1 = {1 , 2 , 3 , 4 , 5};        int []a2 = {2 , 3 , 6 , 1 , 2};        int []a3 = {3 , 2 , 4 , 5 , 6};        int sum = 9;        int n1 = a1.Length;        int n2 = a2.Length;        int n3 = a3.Length;        if(findTriplet(a1, a2, a3, n1,                       n2, n3, sum))        Console.WriteLine("Yes");        else        Console.WriteLine("No");    }} // This code is contributed by vt_m.
<?php// PHP program to find three element// from different three arrays such// that a + b + c is equal to// given sum // Function to check if there is an// element from each array such that// sum of the three elements is equal// to given sum.function findTriplet($a1, $a2, $a3,                     $n1, $n2, $n3,                     $sum){    for ( $i = 0; $i < $n1; $i++)    for ( $j = 0; $j < $n2; $j++)        for ( $k = 0; $k < $n3; $k++)            if ($a1[$i] + $a2[$j] + $a3[$k] == $sum)            return true;     return false;} // Driver Code$a1 = array( 1 , 2 , 3 , 4 , 5 );$a2 = array( 2 , 3 , 6 , 1 , 2 );$a3 = array( 3 , 2 , 4 , 5 , 6 );$sum = 9;$n1 = count($a1);$n2 = count($a2);$n3 = count($a3);if(findTriplet($a1, $a2, $a3, $n1,               $n2, $n3, $sum)==true)echo "Yes" ;elseecho "No"; // This code is contributed by anuj_67.?>
<script> // JavaScript program to find three element// from different three arrays such// that a + b + c is equal to// given sum // Function to check if there is// an element from each array such// that sum of the three elements// is equal to given sum.function findTriplet(a1, a2, a3, n1,                      n2, n3, sum){    for (var i = 0; i < n1; i++)    for (var j = 0; j < n2; j++)        for (var k = 0; k < n3; k++)            if (a1[i] + a2[j] + a3[k] == sum)            return true;     return false;} // Driver Codevar a1 = [ 1 , 2 , 3 , 4 , 5 ];var a2 = [ 2 , 3 , 6 , 1 , 2 ];var a3 = [ 3 , 2 , 4 , 5 , 6 ];var sum = 9;var n1 = a1.length;var n2 = a2.length;var n3 = a3.length;findTriplet(a1, a2, a3, n1, n2, n3, sum)?            document.write("Yes") : document.write("No");  </script>
Yes
Time complexity : O(n3) Space complexity : O(1) 
An efficient solution is to store all elements of first array in hash table (unordered_set in C++) and calculate sum of two elements last two array elements one by one and subtract from given number k and check in hash table if it exists in the hash table then print exist and otherwise not exist. 
1. Store all elements of first array in hash table
2. Generate all pairs of elements from two arrays using
   nested loop. For every pair (a1[i], a2[j]), check if
   sum - (a1[i] + a2[j]) exists in hash table. If yes
   return true.      
Below is the implementation of above idea.  
C++
Java
Python3
C#
Javascript
// C++ program to find three element// from different three arrays such// that a + b + c is equal to// given sum#include<bits/stdc++.h>using namespace std; // Function to check if there is// an element from each array such// that sum of the three elements is// equal to given sum.bool findTriplet(int a1[], int a2[],                 int a3[], int n1,                 int n2, int n3,                 int sum){    // Store elements of    // first array in hash    unordered_set <int> s;    for (int i = 0; i < n1; i++)        s.insert(a1[i]);     // sum last two arrays    // element one by one    for (int i = 0; i < n2; i++)    {        for (int j = 0; j < n3; j++)        {            // Consider current pair and            // find if there is an element            // in a1[] such that these three            // form a required triplet            if (s.find(sum - a2[i] - a3[j]) !=                                       s.end())                return true;        }    }     return false;} // Driver Codeint main(){    int a1[] = { 1 , 2 , 3 , 4 , 5 };    int a2[] = { 2 , 3 , 6 , 1 , 2 };    int a3[] = { 3 , 2 , 4 , 5 , 6 };    int sum = 9;    int n1 = sizeof(a1) / sizeof(a1[0]);    int n2 = sizeof(a2) / sizeof(a2[0]);    int n3 = sizeof(a3) / sizeof(a3[0]);    findTriplet(a1, a2, a3, n1, n2, n3, sum)?    cout << "Yes" : cout << "No";     return 0;}
// Java program to find three element// from different three arrays such// that a + b + c is equal to// given sumimport java.util.*; class GFG{     // Function to check if there is    // an element from each array such    // that sum of the three elements is    // equal to given sum.    static boolean findTriplet(int a1[], int a2[], int a3[],                                int n1, int n2, int n3,                                int sum)    {        // Store elements of        // first array in hash        HashSet<Integer> s = new HashSet<Integer>();        for (int i = 0; i < n1; i++)        {            s.add(a1[i]);        }         // sum last two arrays        // element one by one        ArrayList<Integer> al = new ArrayList<>(s);        for (int i = 0; i < n2; i++)        {            for (int j = 0; j < n3; j++)            {                                 // Consider current pair and                // find if there is an element                // in a1[] such that these three                // form a required triplet                if (al.contains(sum - a2[i] - a3[j]) &                            al.indexOf(sum - a2[i] - a3[j])                            != al.get(al.size() - 1))                {                    return true;                }            }        }        return false;    }     // Driver Code    public static void main(String[] args)    {        int a1[] = {1, 2, 3, 4, 5};        int a2[] = {2, 3, 6, 1, 2};        int a3[] = {3, 2, 4, 5, 6};        int sum = 9;        int n1 = a1.length;        int n2 = a2.length;        int n3 = a3.length;        if (findTriplet(a1, a2, a3, n1, n2, n3, sum))        {            System.out.println("Yes");        }        else        {            System.out.println("No");        }    }} // This code is contributed by 29AjayKumar
# Python3 program to find three element# from different three arrays such# that a + b + c is equal to# given sum # Function to check if there is# an element from each array such# that sum of the three elements is# equal to given sum.def findTriplet(a1, a2, a3,                n1, n2, n3, sum):     # Store elements of first    # array in hash    s = set()     # sum last two arrays element    # one by one    for i in range(n1):        s.add(a1[i])     for i in range(n2):        for j in range(n3):             # Consider current pair and            # find if there is an element            # in a1[] such that these three            # form a required triplet            if sum - a2[i] - a3[j] in s:                return True    return False # Driver codea1 = [1, 2, 3, 4, 5]a2 = [2, 3, 6, 1, 2]a3 = [3, 24, 5, 6]n1 = len(a1)n2 = len(a2)n3 = len(a3)sum = 9if findTriplet(a1, a2, a3,               n1, n2, n3, sum) == True:    print("Yes")else:    print("No") # This code is contributed by Shrikant13
// C# program to find three element// from different three arrays such// that a + b + c is equal to// given sumusing System;using System.Collections.Generic; class GFG{     // Function to check if there is    // an element from each array such    // that sum of the three elements is    // equal to given sum.    static bool findTriplet(int []a1, int []a2, int []a3,                                int n1, int n2, int n3,                                int sum)    {        // Store elements of        // first array in hash        HashSet<int> s = new HashSet<int>();        for (int i = 0; i < n1; i++)        {            s.Add(a1[i]);        }         // sum last two arrays        // element one by one        List<int> al = new List<int>(s);        for (int i = 0; i < n2; i++)        {            for (int j = 0; j < n3; j++)            {                                 // Consider current pair and                // find if there is an element                // in a1[] such that these three                // form a required triplet                if (al.Contains(sum - a2[i] - a3[j]) &                            al.IndexOf(sum - a2[i] - a3[j])                            != al[al.Count - 1])                {                    return true;                }            }        }        return false;    }     // Driver Code    public static void Main(String[] args)    {        int []a1 = {1, 2, 3, 4, 5};        int []a2 = {2, 3, 6, 1, 2};        int []a3 = {3, 2, 4, 5, 6};        int sum = 9;        int n1 = a1.Length;        int n2 = a2.Length;        int n3 = a3.Length;        if (findTriplet(a1, a2, a3, n1, n2, n3, sum))        {            Console.WriteLine("Yes");        }        else        {            Console.WriteLine("No");        }    }} // This code is contributed by PrinciRaj1992
<script>  // Javascript program to find three element// from different three arrays such// that a + b + c is equal to// given sum // Function to check if there is// an element from each array such// that sum of the three elements is// equal to given sum.function findTriplet(a1, a2, a3, n1, n2, n3, sum){     // Store elements of    // first array in hash    var s = new Set();    for (var i = 0; i < n1; i++)        s.add(a1[i]);     // sum last two arrays    // element one by one    for (var i = 0; i < n2; i++)    {        for (var j = 0; j < n3; j++)        {            // Consider current pair and            // find if there is an element            // in a1[] such that these three            // form a required triplet            if (s.has(sum - a2[i] - a3[j]))                return true;        }    }     return false;} // Driver Codevar a1 = [1 , 2 , 3 , 4 , 5];var a2 = [2 , 3 , 6 , 1 , 2];var a3 = [3 , 2 , 4 , 5 , 6];var sum = 9;var n1 = a1.length;var n2 = a2.length;var n3 = a3.length;findTriplet(a1, a2, a3, n1, n2, n3, sum)?document.write( "Yes" ): document.write( "No"); // This code is contributed by famously.</script>
Yes
Time complexity: O(n2) Auxiliary Space: O(n) 
This article is contributed by DANISH_RAZA  . If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 
vt_m
Smitha Dinesh Semwal
29AjayKumar
princiraj1992
shrikanth13
Akanksha_Rai
rrrtnx
famously
sooda367
hardikkoriintern
Arrays
Hash
Arrays
Hash
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Multidimensional Arrays in Java
Stack Data Structure (Introduction and Program)
Linear Search
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
What is Hashing | A Complete Tutorial
Hashing | Set 1 (Introduction)
Internal Working of HashMap in Java
Count pairs with given sum