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, 19Input: {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.
Below is the implementation of the above approach:
import java.util.*;
public class Main {
// Utility function for finding triplet in array
public static void findTriplet(int[] arr, int n)
{
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
if ((arr[i] + arr[j] == arr[k])
|| (arr[i] + arr[k] == arr[j])
|| (arr[j] + arr[k] == arr[i])) {
// printing out the first triplet
System.out.println(
"Numbers are: " + arr[i] + " "
+ arr[j] + " " + arr[k]);
return;
}
}
}
}
// No such triplet is found in array
System.out.println("No such triplet exists");
}
// Driver program
public static void main(String[] args)
{
int[] arr = { 5, 32, 1, 7, 10, 50, 19, 21, 2 };
int n = arr.length;
findTriplet(arr, n);
}
}
Output
Numbers are: 5 7 2
Time complexity: O(n^3)
Auxiliary Space: O(1)Efficient approach:
The idea is similar to Find a triplet that sum to a given value.
Step-by-step approach:
- 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:
// Java program to find three numbers
// such that sum of two makes the
// third element in array
import java.util.Arrays;
public class GFG
{
// Utility function for finding
// triplet in array
static void findTriplet(int arr[], int n)
{
// Sort the array
Arrays.sort(arr);
// For every element in arr check
// if a pair exist(in array) whose
// sum is equal to arr element
for (int i = n - 1; i >= 0; i--)
{
int j = 0;
int k = i - 1;
while (j < k) {
if (arr[i] == arr[j] + arr[k])
{
// Pair found
System.out.println("numbers are " + arr[i] +
" " + arr[j] + " " + arr[k]);
return;
}
else if (arr[i] > arr[j] + arr[k])
j += 1;
else
k -= 1;
}
}
// No such triplet is found in array
System.out.println("No such triplet exists");
}
// Driver code
public static void main(String args[])
{
int arr[] = {5, 32, 1, 7, 10,
50, 19, 21, 2};
int n = arr.length;
findTriplet(arr, n);
}
}
// This code is contributed by Sumit Ghosh
Output
numbers are 21 2 19
Time complexity: O(N^2)
Auxiliary Space: O(1) as no extra space has been used.
Java Program to Find a triplet such that sum of two equals to third element using Binary Search:
- Sort the given array.
- Start a nested loop, fixing the first element i(from 0 to n-1) and moving the other one j (from i+1 to n-1).
- Take the sum of both the elements and search it in the remaining array using Binary Search.
Below is the implementation of the above approach:
// Java program to find three numbers
// such that sum of two makes the
// third element in array
import java.util.*;
class GFG{
// Function to perform binary search
static boolean search(int sum, int start,
int end, int arr[])
{
while (start <= end)
{
int mid = (start + end) / 2;
if (arr[mid] == sum)
{
return true;
}
else if (arr[mid] > sum)
{
end = mid - 1;
}
else
{
start = mid + 1;
}
}
return false;
}
// Function to find the triplets
static void findTriplet(int arr[], int n)
{
// Sorting the array
Arrays.sort(arr);
// Initialising nested loops
for(int i = 0; i < n; i++)
{
for(int j = i + 1; j < n; j++)
{
// Finding the sum of the numbers
if (search((arr[i] + arr[j]), j, n - 1, arr))
{
// Printing out the first triplet
System.out.print("Numbers are: " + arr[i] + " " +
arr[j] + " " + (arr[i] + arr[j]));
return;
}
}
}
// If no such triplets are found
System.out.print("No such numbers exist");
}
// Driver code
public static void main(String args[])
{
int arr[] = { 5, 32, 1, 7, 10, 50, 19, 21, 2 };
int n = arr.length;
findTriplet(arr, n);
}
}
// This code is contributed by target_2
Output
Numbers are: 2 5 7
Time Complexity: O(N^2*log N)
Auxiliary Space: O(1)
Please refer complete article on Find a triplet such that sum of two equals to third element for more details!