查找C ++中是否存在一个总和为0的子数组

在这个问题中,我们得到了一个大小为n的数组arr [],该数组由整数值组成。我们的任务是查找是否存在一个总和为0的子数组。 

我们需要检查给定的数组是否包含一个子数组,其中所有元素的总和等于0。

让我们举个例子来了解这个问题,

输入:  arr [] = {3,1,-2,1,4,5}

输出: 

解释: 

子数组{1,-2,1}的所有值的总和等于0。

解决方法: 

通过考虑所有子数组并检查所有元素的总和,可以轻松解决该问题,等于0。

解决该问题的另一种方法是使用散列。 我们需要遍历数组,然后找到总和直到当前索引并将其存储在哈希表中。
然后,在哈希表中检查,求和值是否与先前遇到的值相同,将找到一个总和= 0的子数组。

如果找到子数组,则返回True 

否则返回False

程序来说明我们的问题的解决方法, 

示例

#include <bits/stdc++.h>
using namespace std;

bool isSubArraySumZero(int arr[], int n) {
   
   unordered_set<int> sumHash;

   int currSum = 0;
   for (int i = 0 ; i < n ; i++) {
     
      currSum += arr[i];
      if (currSum == 0 || sumHash.find(currSum) != sumHash.end())
         return true;
      sumHash.insert(currSum);
   }
   return false;
}

int main() {
   
   int arr[] = { 3, 1, -2, 1, 4, 5 };
   int n = sizeof(arr)/sizeof(arr[0]);
   if (isSubArraySumZero(arr, n))
      cout<<"SubArray with sum equal to 0 exists in the array";
   else
      cout<<"No subarray exists";
   return 0;
}
输出结果
SubArray with sum equal to 0 exists in the array