Post

POTD #8 - Find All Triplets with Zero Sum | Geeks For Geeks

POTD #8 - Find All Triplets with Zero Sum | Geeks For Geeks

{% raw %}

Problem Statement

Given an array arr[], find all possible triplets i, j, k in the arr[] whose sum of elements is equals to zero. 
Returned triplet should also be internally sorted i.e. i<j<k.

Input: arr[] = [0, -1, 2, -3, 1]Output: [[0, 1, 4], [2, 3, 4]]Explanation: Triplets with sum 0 are:arr[0] + arr[1] + arr[4] = 0 + (-1) + 1 = 0arr[2] + arr[3] + arr[4] = 2 + (-3) + 1 = 0

Input: arr[] = [1, -2, 1, 0, 5]Output: [[0, 1, 2]]Explanation: Only triplet which satisfies the condition is arr[0] + arr[1] + arr[2] = 1 + (-2) + 1 = 0

Input: arr[] = [2, 3, 1, 0, 5]Output: [[]]Explanation: There is no triplet with sum 0.

My Approach

  • Created a dict with val as key and index as value, after iterating through the array.
  • Started iterating the array, and another iteration from the next index position.
  • a + b + c = 0. I need to check c (c = 0 – a – b). Will check if c is in dict.
  • if c is in dict, then will sort a,b,c and store in result set.

class Solution:    def findTriplets(self, arr):        # Your code here        hash_set = {}        index = 0        total = len(arr)        result = []        result_set = {}                for itr in range(total):            hash_set[arr[itr]] = itr                for first in range(total):            for itr in range(first+1, total):                rem = 0 - arr[itr] - arr[first]                if hash_set.get(rem) is not None and hash_set.get(rem) != first and hash_set.get(rem) != itr:                    val = [first, itr, hash_set.get(rem)]                    val.sort()                    if result_set.get(tuple(val)) is None:                        result_set[tuple(val)] = True                        result.append(val)                        return result

{% endraw %}

This post is licensed under CC BY 4.0 by the author.