在 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

更新于: 2021年1月22日

325 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告