Find all triplets with zero sum - GeeksforGeeks

20 Apr, 2022
Given an array of distinct elements. The task is to find triplets in the array whose sum is zero.
Examples : 
Input : arr[] = {0, -1, 2, -3, 1}
Output : (0 -1 1), (2 -3 1)

Explanation : The triplets with zero sum are
0 + -1 + 1 = 0 and 2 + -3 + 1 = 0  

Input : arr[] = {1, -2, 1, 0, 5}
Output : 1 -2  1
Explanation : The triplets with zero sum is
1 + -2 + 1 = 0   
Method 1: This is a simple method that takes O(n3) time to arrive at the result.
Approach: The naive approach runs three loops and check one by one that sum of three elements is zero or not. If the sum of three elements is zero then print elements otherwise print not found.
Algorithm: Run three nested loops with loop counter i, j, kThe first loops will run from 0 to n-3 and second loop from i+1 to n-2 and the third loop from j+1 to n-1. The loop counter represents the three elements of the triplet.Check if the sum of elements at i’th, j’th, k’th is equal to zero or not. If yes print the sum else continue.
Run three nested loops with loop counter i, j, kThe first loops will run from 0 to n-3 and second loop from i+1 to n-2 and the third loop from j+1 to n-1. The loop counter represents the three elements of the triplet.Check if the sum of elements at i’th, j’th, k’th is equal to zero or not. If yes print the sum else continue.
Run three nested loops with loop counter i, j, k
The first loops will run from 0 to n-3 and second loop from i+1 to n-2 and the third loop from j+1 to n-1. The loop counter represents the three elements of the triplet.
Check if the sum of elements at i’th, j’th, k’th is equal to zero or not. If yes print the sum else continue.
Below is the implementation of the above approach: 
C++
Java
Python3
C#
PHP
Javascript
// A simple C++ program to find three elements// whose sum is equal to zero#include<bits/stdc++.h>using namespace std; // Prints all triplets in arr[] with 0 sumvoid findTriplets(int arr[], int n){    bool found = false;    for (int i=0; i<n-2; i++)    {        for (int j=i+1; j<n-1; j++)        {            for (int k=j+1; k<n; k++)            {                if (arr[i]+arr[j]+arr[k] == 0)                {                    cout << arr[i] << " "                         << arr[j] << " "                         << arr[k] <<endl;                    found = true;                }            }        }    }     // If no triplet with 0 sum found in array    if (found == false)        cout << " not exist "<<endl; } // Driver codeint main(){    int arr[] = {0, -1, 2, -3, 1};    int n = sizeof(arr)/sizeof(arr[0]);    findTriplets(arr, n);    return 0;}
// A simple Java program to find three elements// whose sum is equal to zeroclass num{// Prints all triplets in arr[] with 0 sumstatic void findTriplets(int[] arr, int n){    boolean found = false;    for (int i=0; i<n-2; i++)    {        for (int j=i+1; j<n-1; j++)        {            for (int k=j+1; k<n; k++)            {                if (arr[i]+arr[j]+arr[k] == 0)                {                    System.out.print(arr[i]);                    System.out.print(" ");                    System.out.print(arr[j]);                    System.out.print(" ");                    System.out.print(arr[k]);                    System.out.print("\n");                    found = true;                }            }        }    }     // If no triplet with 0 sum found in array    if (found == false)        System.out.println(" not exist "); } // Driver codepublic static void main(String[] args){    int arr[] = {0, -1, 2, -3, 1};    int n =arr.length;    findTriplets(arr, n); }}//This code is contributed by//Smitha Dinesh Semwal
# A simple Python 3 program# to find three elements whose# sum is equal to zero # Prints all triplets in# arr[] with 0 sumdef findTriplets(arr, n):     found = False    for i in range(0, n-2):             for j in range(i+1, n-1):                     for k in range(j+1, n):                             if (arr[i] + arr[j] + arr[k] == 0):                    print(arr[i], arr[j], arr[k])                    found = True                      # If no triplet with 0 sum    # found in array    if (found == False):        print(" not exist ") # Driver codearr = [0, -1, 2, -3, 1]n = len(arr)findTriplets(arr, n) # This code is contributed by Smitha Dinesh Semwal   
// A simple C# program to find three elements// whose sum is equal to zerousing System; class GFG {         // Prints all triplets in arr[] with 0 sum    static void findTriplets(int []arr, int n)    {        bool found = false;        for (int i = 0; i < n-2; i++)        {            for (int j = i+1; j < n-1; j++)            {                for (int k = j+1; k < n; k++)                {                    if (arr[i] + arr[j] + arr[k]                                           == 0)                    {                        Console.Write(arr[i]);                        Console.Write(" ");                        Console.Write(arr[j]);                        Console.Write(" ");                        Console.Write(arr[k]);                        Console.Write("\n");                        found = true;                    }                }            }        }             // If no triplet with 0 sum found in        // array        if (found == false)            Console.Write(" not exist ");    }         // Driver code    public static void Main()    {        int []arr = {0, -1, 2, -3, 1};        int n = arr.Length;        findTriplets(arr, n);    }} // This code is contributed by nitin mittal.
<?php// A simple PHP program to// find three elements whose// sum is equal to zero // Prints all triplets// in arr[] with 0 sumfunction findTriplets($arr, $n){    $found = false;    for ($i = 0; $i < $n - 2; $i++)    {        for ($j = $i + 1; $j < $n - 1; $j++)        {            for ($k = $j + 1; $k < $n; $k++)            {                if ($arr[$i] + $arr[$j] +                               $arr[$k] == 0)                {                    echo $arr[$i] , " ",                         $arr[$j] , " ",                         $arr[$k] ,"\n";                    $found = true;                }            }        }    }     // If no triplet with 0    // sum found in array    if ($found == false)        echo " not exist ", "\n"; } // Driver Code$arr = array (0, -1, 2, -3, 1);$n = sizeof($arr);findTriplets($arr, $n); // This code is contributed by m_kit?>
<script>// A simple Javascript program to find//three elements whose sum is equal to zero    arr = [0, -1, 2, -3, 1];     // Prints all triplets in arr[] with 0 sum       function findTriplets(arr) {        let found = false;        for (let i = 0; i < arr.length - 2; i++) {        for (let j = i + 1; j < arr.length - 1; j++) {            for (let k = j + 1; k < arr.length; k++) {                if (arr[i] + arr[j] + arr[k] === 0)                {                    document.write(arr[i]);                    document.write(" ");                    document.write(arr[j]);                    document.write(" ");                    document.write(arr[k]);                    document.write("<br>");                    found = true;                                    }            }        }        // If no triplet with 0 sum found in array        if(found === false) {            document.write(" not exist ");        }    }   }    findTriplets(arr);// This code is contributed by Surbhi Tyagi</script>
0 -1 1
2 -3 1
Complexity Analysis: 
Time Complexity: O(n3). As three nested loops are required, so the time complexity is O(n3).
Auxiliary Space: O(1). Since no extra space is required, so the space complexity is constant.
 Method 2: The second method uses the process of Hashing to arrive at the result and is solved at a lesser time of O(n2). 
Approach: This involves traversing through the array. For every element arr[i], find a pair with sum “-arr[i]”. This problem reduces to pair sum and can be solved in O(n) time using hashing.
Algorithm: 
Create a hashmap to store a key-value pair.Run a nested loop with two loops, the outer loop from 0 to n-2 and the inner loop from i+1 to n-1Check if the sum of ith and jth element multiplied with -1 is present in the hashmap or notIf the element is present in the hashmap, print the triplet else insert the j’th element in the hashmap.
Create a hashmap to store a key-value pair.
Run a nested loop with two loops, the outer loop from 0 to n-2 and the inner loop from i+1 to n-1
Check if the sum of ith and jth element multiplied with -1 is present in the hashmap or not
If the element is present in the hashmap, print the triplet else insert the j’th element in the hashmap.
Below is the implementation of the above approach: 
C++
Java
Python3
C#
Javascript
// C++ program to find triplets in a given// array whose sum is zero#include<bits/stdc++.h>using namespace std; // function to print triplets with 0 sumvoid findTriplets(int arr[], int n){    bool found = false;     for (int i=0; i<n-1; i++)    {        // Find all pairs with sum equals to        // "-arr[i]"        unordered_set<int> s;        for (int j=i+1; j<n; j++)        {            int x = -(arr[i] + arr[j]);            if (s.find(x) != s.end())            {                printf("%d %d %d\n", x, arr[i], arr[j]);                found = true;            }            else                s.insert(arr[j]);        }    }     if (found == false)        cout << " No Triplet Found" << endl;} // Driver codeint main(){    int arr[] = {0, -1, 2, -3, 1};    int n = sizeof(arr)/sizeof(arr[0]);    findTriplets(arr, n);    return 0;}
// Java program to find triplets in a given// array whose sum is zeroimport java.util.*; class GFG{     // function to print triplets with 0 sum    static void findTriplets(int arr[], int n)    {        boolean found = false;         for (int i = 0; i < n - 1; i++)        {            // Find all pairs with sum equals to            // "-arr[i]"            HashSet<Integer> s = new HashSet<Integer>();            for (int j = i + 1; j < n; j++)            {                int x = -(arr[i] + arr[j]);                if (s.contains(x))                {                    System.out.printf("%d %d %d\n", x, arr[i], arr[j]);                    found = true;                }                else                {                    s.add(arr[j]);                }            }        }         if (found == false)        {            System.out.printf(" No Triplet Found\n");        }    }     // Driver code    public static void main(String[] args)    {        int arr[] = {0, -1, 2, -3, 1};        int n = arr.length;        findTriplets(arr, n);    }} // This code contributed by Rajput-Ji
# Python3 program to find triplets# in a given array whose sum is zero # function to print triplets with 0 sumdef findTriplets(arr, n):    found = False    for i in range(n - 1):         # Find all pairs with sum        # equals to "-arr[i]"        s = set()        for j in range(i + 1, n):            x = -(arr[i] + arr[j])            if x in s:                print(x, arr[i], arr[j])                found = True            else:                s.add(arr[j])    if found == False:        print("No Triplet Found") # Driver Codearr = [0, -1, 2, -3, 1]n = len(arr)findTriplets(arr, n) # This code is contributed by Shrikant13
// C# program to find triplets in a given// array whose sum is zerousing System;using System.Collections.Generic; class GFG{     // function to print triplets with 0 sum    static void findTriplets(int []arr, int n)    {        bool found = false;         for (int i = 0; i < n - 1; i++)        {            // Find all pairs with sum equals to            // "-arr[i]"            HashSet<int> s = new HashSet<int>();            for (int j = i + 1; j < n; j++)            {                int x = -(arr[i] + arr[j]);                if (s.Contains(x))                {                    Console.Write("{0} {1} {2}\n", x, arr[i], arr[j]);                    found = true;                }                else                {                    s.Add(arr[j]);                }            }        }         if (found == false)        {            Console.Write(" No Triplet Found\n");        }    }     // Driver code    public static void Main(String[] args)    {        int []arr = {0, -1, 2, -3, 1};        int n = arr.Length;        findTriplets(arr, n);    }} // This code has been contributed by 29AjayKumar
<script>  // Javascript program to find triplets in a given// array whose sum is zero // function to print triplets with 0 sumfunction findTriplets(arr, n){    var found = false;     for (var i = 0; i < n - 1; i++)    {        // Find all pairs with sum equals to        // "-arr[i]"        var s = new Set();        for (var j = i + 1; j < n; j++)        {            var x = -(arr[i] + arr[j]);            if (s.has(x))            {                document.write( x + " " + arr[i] + " " + arr[j] + "<br>");                found = true;            }            else                s.add(arr[j]);        }    }     if (found == false)        document.write( " No Triplet Found" );} // Driver codevar arr = [0, -1, 2, -3, 1];var n = arr.length;findTriplets(arr, n); // This code is contributed by famously.</script>
-1 0 1
-3 2 1
Complexity Analysis: 
Time Complexity: O(n2). Since two nested loops are required, so the time complexity is O(n2).
Auxiliary Space: O(n). Since a hashmap is required, so the space complexity is linear.
 Method 3: This method uses Sorting to arrive at the correct result and is solved in O(n2) time.  
Approach: The above method requires extra space. The idea is based on method 2 of this post. For every element check that there is a pair whose sum is equal to the negative value of that element.
Algorithm: 
Sort the array in ascending order.Traverse the array from start to end.For every index i, create two variables l = i + 1 and r = n – 1Run a loop until l is less than r if the sum of array[i], array[l] and array[r] is equal to zero then print the triplet and break the loopIf the sum is less than zero then increment the value of l, by increasing the value of l the sum will increase as the array is sorted, so array[l+1] > array [l]If the sum is greater than zero then decrement the value of r, by decreasing the value of r the sum will decrease as the array is sorted, so array[r-1] < array [r].
Sort the array in ascending order.
Traverse the array from start to end.
For every index i, create two variables l = i + 1 and r = n – 1
Run a loop until l is less than r if the sum of array[i], array[l] and array[r] is equal to zero then print the triplet and break the loop
If the sum is less than zero then increment the value of l, by increasing the value of l the sum will increase as the array is sorted, so array[l+1] > array [l]
If the sum is greater than zero then decrement the value of r, by decreasing the value of r the sum will decrease as the array is sorted, so array[r-1] < array [r].
Below is the implementation of the above approach: 
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find triplets in a given// array whose sum is zero#include<bits/stdc++.h>using namespace std; // function to print triplets with 0 sumvoid findTriplets(int arr[], int n){    bool found = false;     // sort array elements    sort(arr, arr+n);     for (int i=0; i<n-1; i++)    {        // initialize left and right        int l = i + 1;        int r = n - 1;        int x = arr[i];        while (l < r)        {            if (x + arr[l] + arr[r] == 0)            {                // print elements if it's sum is zero                printf("%d %d %d\n", x, arr[l], arr[r]);                l++;                r--;               // found = true;               //   break;            }             // If sum of three elements is less            // than zero then increment in left            else if (x + arr[l] + arr[r] < 0)                l++;             // if sum is greater than zero then            // decrement in right side            else                r--;        }    }     if (found == false)        cout << " No Triplet Found" << endl;} // Driven sourceint main(){    int arr[] = {0, -1, 2, -3, 1};    int n = sizeof(arr)/sizeof(arr[0]);    findTriplets(arr, n);    return 0;}
// Java  program to find triplets in a given// array whose sum is zeroimport java.util.Arrays;import java.io.*; class GFG {    // function to print triplets with 0 sumstatic void findTriplets(int arr[], int n){    boolean found = false;     // sort array elements    Arrays.sort(arr);     for (int i=0; i<n-1; i++)    {        // initialize left and right        int l = i + 1;        int r = n - 1;        int x = arr[i];        while (l < r)        {            if (x + arr[l] + arr[r] == 0)            {                // print elements if it's sum is zero                    System.out.print(x + " ");                    System.out.print(arr[l]+ " ");                    System.out.println(arr[r]+ " ");                     l++;                r--;                found = true;            }             // If sum of three elements is less            // than zero then increment in left            else if (x + arr[l] + arr[r] < 0)                l++;             // if sum is greater than zero then            // decrement in right side            else                r--;        }    }     if (found == false)            System.out.println(" No Triplet Found");} // Driven source    public static void main (String[] args) {     int arr[] = {0, -1, 2, -3, 1};    int n =arr.length;    findTriplets(arr, n);    }//This code is contributed by Tushil..   }
# python program to find triplets in a given# array whose sum is zero # function to print triplets with 0 sumdef findTriplets(arr, n):     found = False     # sort array elements    arr.sort()     for i in range(0, n-1):             # initialize left and right        l = i + 1        r = n - 1        x = arr[i]        while (l < r):                     if (x + arr[l] + arr[r] == 0):                # print elements if it's sum is zero                print(x, arr[l], arr[r])                l+=1                r-=1                found = True                          # If sum of three elements is less            # than zero then increment in left            elif (x + arr[l] + arr[r] < 0):                l+=1             # if sum is greater than zero then            # decrement in right side            else:                r-=1             if (found == False):        print(" No Triplet Found")  # Driven sourcearr = [0, -1, 2, -3, 1]n = len(arr)findTriplets(arr, n) # This code is contributed by Smitha Dinesh Semwal
// C#  program to find triplets in a given// array whose sum is zerousing System; public class GFG{        // function to print triplets with 0 sumstatic void findTriplets(int []arr, int n){    bool found = false;     // sort array elements    Array.Sort(arr);     for (int i=0; i<n-1; i++)    {        // initialize left and right        int l = i + 1;        int r = n - 1;        int x = arr[i];        while (l < r)        {            if (x + arr[l] + arr[r] == 0)            {                // print elements if it's sum is zero                    Console.Write(x + " ");                    Console.Write(arr[l]+ " ");                    Console.WriteLine(arr[r]+ " ");                     l++;                r--;                found = true;            }             // If sum of three elements is less            // than zero then increment in left            else if (x + arr[l] + arr[r] < 0)                l++;             // if sum is greater than zero then            // decrement in right side            else                r--;        }    }     if (found == false)            Console.WriteLine(" No Triplet Found");} // Driven source    static public void Main (){             int []arr = {0, -1, 2, -3, 1};    int n =arr.Length;    findTriplets(arr, n);    }//This code is contributed by akt_mit..}
<?php// PHP program to find// triplets in a given// array whose sum is zero // function to print// triplets with 0 sumfunction findTriplets($arr, $n){    $found = false;     // sort array elements    sort($arr);     for ($i = 0; $i < $n - 1; $i++)    {        // initialize left        // and right        $l = $i + 1;        $r = $n - 1;        $x = $arr[$i];        while ($l < $r)        {            if ($x + $arr[$l] +                     $arr[$r] == 0)            {                // print elements if                // it's sum is zero                echo $x," ", $arr[$l],                        " ", $arr[$r], "\n";                $l++;                $r--;                $found = true;            }             // If sum of three elements            // is less than zero then            // increment in left            else if ($x + $arr[$l] +                          $arr[$r] < 0)                $l++;             // if sum is greater than            // zero then decrement            // in right side            else                $r--;        }    }     if ($found == false)        echo " No Triplet Found" ,"\n";} // Driver Code$arr = array (0, -1, 2, -3, 1);$n = sizeof($arr);findTriplets($arr, $n); // This code is contributed by ajit?>
<script> // Javascript program to find triplets in a given// array whose sum is zero // function to print triplets with 0 sumfunction findTriplets(arr, n){    let found = false;     // sort array elements    arr.sort((a, b) => a - b);     for (let i=0; i<n-1; i++)    {        // initialize left and right        let l = i + 1;        let r = n - 1;        let x = arr[i];        while (l < r)        {            if (x + arr[l] + arr[r] == 0)            {                // print elements if it's sum is zero                document.write(x + " ");                document.write(arr[l]+ " ");                document.write(arr[r]+ " " + "<br>");                l++;                r--;                found = true;            }             // If sum of three elements is less            // than zero then increment in left            else if (x + arr[l] + arr[r] < 0)                l++;             // if sum is greater than zero then            // decrement in right side            else                r--;        }    }     if (found == false)        document.write(" No Triplet Found" + "<br>");} // Driven source     let arr = [0, -1, 2, -3, 1];    let n = arr.length;    findTriplets(arr, n);  // This code is contributed by Mayank Tyagi </script>
-3 1 2
-1 0 1
Complexity Analysis: 
Time Complexity : O(n2). Only two nested loops are required, so the time complexity is O(n2).
Auxiliary Space : O(1), no extra space is required, so the time complexity is constant.
This article is contributed by DANISH_RAZA. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
nitin mittal
jit_t
shrikanth13
Rajput-Ji
29AjayKumar
andrew1234
hasanbasri
surbhityagi15
mayanktyagi1709
shivamkrishna
srivastavaharshit848
jaydeepradadiya
famously
vikeshkumar5329
7rahult
himanshu180599
dragonuncaged
Facebook
Google
two-pointer-algorithm
Arrays
Hash
Searching
Sorting
Google
Facebook
two-pointer-algorithm
Arrays
Searching
Hash
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Arrays in Java
Arrays in C/C++
Program for array rotation
Stack Data Structure (Introduction and Program)
Top 50 Array Coding Problems for Interviews
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Internal Working of HashMap in Java
Hashing | Set 1 (Introduction)
Count pairs with given sum
Hashing | Set 3 (Open Addressing)