在 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
廣告