इस समस्या में, हमें पूर्णांक मानों से युक्त n आकार का एक सरणी arr[] दिया जाता है। हमारा काम यह पता लगाना है कि क्या 0 योग के साथ कोई सबरे है।
हमें यह जांचने की आवश्यकता है कि क्या दिए गए सरणी में एक उप-सरणी है जिसमें सभी तत्वों का योग 0 के बराबर है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: गिरफ्तारी [] ={3, 1, -2, 1, 4, 5}
आउटपुट: हाँ
स्पष्टीकरण:
Subarray {1, -2, 1} में सभी मानों का योग 0 के बराबर है।
समाधान दृष्टिकोण:
सभी उपसरणियों पर विचार करके और सभी तत्वों के योग की जाँच करके समस्या का एक सरल समाधान 0 के बराबर है।
समस्या का दूसरा समाधान हैशिंग का उपयोग करना है। हमें सरणी पर लूप करना होगा और फिर वर्तमान इंडेक्स तक योग ढूंढना होगा और इसे हैश टेबल में स्टोर करना होगा।
फिर हैश तालिका में जांचें, यदि योग मान वही है जो पहले सामने आया था, तो योग =0 के साथ एक उप-सरणी पाई जाती है।
यदि उप-सरणी पाई जाती है तो सत्य return लौटाएं
अन्यथा गलत लौटाएं
हमारी समस्या की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#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