查找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
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下