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