In this article, We will discuss the problem to find three elements from different three arrays such that A + B + C = sum. Consider the below example for a better understanding.
Let’s assume A, B, and C are 3 arrays of “N” elements each. Now your task is to find a way for determining whether there exists an a in A, b in B, and c in C such that a+b+c = sum.
Consider the below example,
Example-1:
Input : A[] = { 1 , 2 , 3 , 4 , 5 }; B[] = { 2 , 3 , 6 , 1 , 2 }; C[] = { 3 , 2 , 4 , 5 , 6 }; sum = 9 Output : Yes Explanation: 1 + 2 + 6 = 9 here 1 from A[] and 2 from B[] and 6 from C[]
Example-2:
Input : A[] = { 1 , 2 , 3 , 4 , 5 }; B[] = { 2 , 3 , 6 , 1 , 2 }; C[] = { 3 , 2 , 4 , 5 , 6 }; sum = 120 Output : No Explanation: Never be the sum of three array index value will be 120.
The primary prerequisites to understanding this C/C++ Program:
- Understanding array in C/C++.
- How to pass an array in a function.
- For loop in C.
- Use of sizeof operator in C/C++.
Naive Approach:
It is the simplest approach to find three elements from different three arrays such that A + B + C = sum. But the cost is performance, so it is not advisable.
In this approach, you need to run three loops and check the sum of three elements of the different arrays equals the given number or not. If equal then simply break all three loops and print the message “Yes”.
/* C++ program to Find Three Element From Different Three Arrays Such That a + b + c = sum */ #include<bits/stdc++.h> using namespace std; bool findVariantOf3Sum(int A[], int B[], int C[], const int N1, const int N2, const int N3, const int sum) { bool isFind = false; for (int i = 0; ((i < N1) && !isFind); i++) { for (int j = 0; ((j < N2) && !isFind); j++) { for (int k = 0; ((k < N3) && !isFind); k++) { const int addValue = A[i] + B[j] + C[k]; isFind = (addValue == sum); } } } return isFind; } int main() { int A[] = { 1, 2, 3, 4, 5 }; int B[] = { 2, 3, 6, 1, 2 }; int C[] = { 3, 2, 4, 5, 6 }; const int sum = 9; const int N1 = sizeof(A) / sizeof(A[0]); const int N2 = sizeof(B) / sizeof(B[0]); const int N3 = sizeof(C) / sizeof(C[0]); const bool isFind = findVariantOf3Sum(A, B, C, N1, N2, N3, sum); //print the result cout << (isFind ? "Yes":"No"); return 0; }
Output: “Yes”
Time Complexity: O(n3)
Auxiliary Space: O(1)
Efficient Approach:
Using the unordered_set (stores only unique elements) you can write the program efficiently. In this solution, we store all the elements of the first array in the data container and calculate the sum of two elements of the last two array elements one by one and subtract from the given number “sum” and check the data container. If it exists in the data container then print “Yes” otherwise “No”.
/* C++ program to Find Three Element From Different Three Arrays Such That a + b + c = sum */ #include<bits/stdc++.h> using namespace std; bool findVariantOf3Sum(int A[], int B[], int C[], const int N1, const int N2, const int N3, const int sum) { /* Store unique elements of array A in no particular order. */ unordered_set <int> arr; for (int i = 0; i < N1; i++) { arr.insert(A[i]); } bool isFind = false; /* sum last two arrays element one by one */ for (int i = 0; ((i < N2) && (!isFind)); i++) { for (int j = 0; ((j < N3) && (!isFind)) ; j++) { /* Consider the pair (i,j) and find if there is an element in A[] such that a+b+c = sum */ if (arr.find(sum - B[i] - C[j]) != arr.end()) { isFind = true; } } } return isFind; } int main() { int A[] = { 1, 2, 3, 4, 5 }; int B[] = { 2, 3, 6, 1, 2 }; int C[] = { 3, 2, 4, 5, 6 }; int sum = 7; const int N1 = sizeof(A) / sizeof(A[0]); const int N2 = sizeof(B) / sizeof(B[0]); const int N3 = sizeof(C) / sizeof(C[0]); const bool isFind = findVariantOf3Sum(A, B, C, N1, N2, N3, sum); //print the result cout << (isFind ? "Yes":"No"); return 0; }
Output: “Yes”
Time Complexity: O(n2)
Auxiliary Space: O(n)
Recommended Articles for you:
- C Program to Find the Length of a String using strlen().
- Best Gifts for the programmer and techies.
- C Programming Courses And Tutorials.
- CPP Programming Courses And Tutorials.
- Python Courses and Tutorials.
- C program to calculate the power of a number.
- How to find whether a given number is prime number in C?
- sqrt function in C.
- C program to find all roots of a quadratic equation using switch case.
- C program to find the roots of a quadratic equation.