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

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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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.

## C++

 `// C++ program to find three element ` `// from different three arrays such  ` `// that a + b + c is equal to  ` `// given sum ` `#include ` `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 Code ` `int` `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); ` `    ``int` `n2 = ``sizeof``(a2) / ``sizeof``(a2); ` `    ``int` `n3 = ``sizeof``(a3) / ``sizeof``(a3); ` `    ``findTriplet(a1, a2, a3, n1, n2, n3, sum)? ` `                ``cout << ``"Yes"` `: cout << ``"No"``; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find three element ` `// from different three arrays such  ` `// that a + b + c is equal to  ` `// given sum ` `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) ` `    ``{ ` `        ``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

 `# 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 Code ` `a1 ``=` `[ ``1` `, ``2` `, ``3` `, ``4` `, ``5` `] ` `a2 ``=` `[ ``2` `, ``3` `, ``6` `, ``1` `, ``2` `] ` `a3 ``=` `[ ``3` `, ``2` `, ``4` `, ``5` `, ``6` `] ` `sum` `=` `9` `n1 ``=` `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#

 `// C# program to find three element  ` `// from different three arrays such ` `// that a + b + c is equal to ` `// given sum ` `using` `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

 ` `

Output :

```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 substract from given number k and check in hash table if it’s exist in 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++

 `// C++ program to find three element  ` `// from different three arrays such  ` `// that a + b + c is equal to ` `// given sum ` `#include ` `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 Code ` `int` `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); ` `    ``int` `n2 = ``sizeof``(a2) / ``sizeof``(a2); ` `    ``int` `n3 = ``sizeof``(a3) / ``sizeof``(a3); ` `    ``findTriplet(a1, a2, a3, n1, n2, n3, sum)? ` `    ``cout << ``"Yes"` `: cout << ``"No"``; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to find three element  ` `// from different three arrays such  ` `// that a + b + c is equal to ` `// given sum ` `import` `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 s = ``new` `HashSet(); ` `        ``for` `(``int` `i = ``0``; i < n1; i++)  ` `        ``{ ` `            ``s.add(a1[i]); ` `        ``} ` ` `  `        ``// sum last two arrays  ` `        ``// element one by one ` `        ``ArrayList 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

 `# 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 code ` `a1 ``=` `[``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` `=` `9` `if` `findTriplet(a1, a2, a3,  ` `               ``n1, n2, n3, ``sum``) ``=``=` `True``: ` `    ``print``(``"Yes"``) ` `else``: ` `    ``print``(``"No"``) ` ` `  `# This code is contributed by Shrikant13 `

## C#

 `// C# program to find three element  ` `// from different three arrays such  ` `// that a + b + c is equal to ` `// given sum ` `using` `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 `

Output :

```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 contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.