Given an array of integers, you have to find three numbers such that the sum of two elements equals the third element.
Examples:
Input: {5, 32, 1, 7, 10, 50, 19, 21, 2}
Output: 21, 2, 19
Input: {5, 32, 1, 7, 10, 50, 19, 21, 0}
Output: no such triplet exist
Question source: Arcesium Interview Experience | Set 7 (On campus for Internship)
Simple approach: Run three loops and check if there exists a triplet such that sum of two elements equals the third element.
Time complexity: O(n^3)
Efficient approach: The idea is similar to Find a triplet that sum to a given value.
- Sort the given array first.
- Start fixing the greatest element of three from the back and traverse the array to find the other two numbers which sum up to the third element.
- Take two pointers j(from front) and k(initially i-1) to find the smallest of the two number and from i-1 to find the largest of the two remaining numbers
- If the addition of both the numbers is still less than A[i], then we need to increase the value of the summation of two numbers, thereby increasing the j pointer, so as to increase the value of A[j] + A[k].
- If the addition of both the numbers is more than A[i], then we need to decrease the value of the summation of two numbers, thereby decrease the k pointer so as to decrease the overall value of A[j] + A[k].
Below image is a dry run of the above approach:

Below is the implementation of the above approach:
Python
def findTriplet(arr, n):
arr.sort()
i = n - 1
while (i > = 0 ):
j = 0
k = i - 1
while (j < k):
if (arr[i] = = arr[j] + arr[k]):
print "numbers are " , arr[i],
arr[j], arr[k]
return
elif (arr[i] > arr[j] + arr[k]):
j + = 1
else :
k - = 1
i - = 1
print "No such triplet exists"
arr = [ 5 , 32 , 1 , 7 , 10 , 50 , 19 , 21 , 2 ]
n = len (arr)
findTriplet(arr, n)
|
Output:
numbers are 21 2 19
Time complexity: O(N^2)
Space Complexity: O(1) as no extra space has been used.
Please refer complete article on Find a triplet such that sum of two equals to third element for more details!