find and return whether the given array contains a non-empty subarray with a sum equal to 0. code example

Example 1: Function to print all subarrays with a zero-sum in a given array

# Utility function to insert <key, value> into the dictionary
def insert(dict, key, value):
 
    # if the key is seen for the first time, initialize the list
    dict.setdefault(key, []).append(value)
 
 
# Function to print all sublists with a zero-sum present in a given list
def printallSublists(A):
 
    # create an empty dictionary to store the ending index of all
    # sublists having the same sum
    dict = {}
 
    # insert `(0, -1)` pair into the dictionary to handle the case when
    # sublist with zero-sum starts from index 0
    insert(dict, 0, -1)
 
    sum = 0
 
    # traverse the given list
    for i in range(len(A)):
 
        # sum of elements so far
        sum += A[i]
 
        # if the sum is seen before, there exists at least one
        # sublist with zero-sum
        if sum in dict:
 
            list = dict.get(sum)
 
            # find all sublists with the same sum
            for value in list:
                print("Sublist is", (value + 1, i))
 
        # insert (sum so far, current index) pair into the dictionary
        insert(dict, sum, i)

Example 2: Function to check if a sublist with zero-sum is present in a given list or no

def hasZeroSumSublist(A):
 
    # create an empty set to store the sum of elements of each
    # sublist `A[0…i]`, where `0 <= i < len(A)`
    s = set()
 
    # insert 0 into the set to handle the case when sublist with
    # zero-sum starts from index 0
    s.add(0)
 
    sum = 0
 
    # traverse the given list
    for i in A:
 
        # sum of elements so far
        sum += i
 
        # if the sum is seen before, we have found a sublist with zero-sum
        if sum in s:
            return True
 
        # insert sum so far into the set
        s.add(sum)
 
    # we reach here when no sublist with zero-sum exists
    return False