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