在 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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告