Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

शून्य योग के साथ सबसे बड़े सबअरे की लंबाई खोजने के लिए C++ में एक प्रोग्राम लिखें

मान लीजिए कि हमने एन पूर्णांकों की एक सरणी दी है, जिसका कार्य अधिकतम लंबाई वाले उप-सरणी की लंबाई का पता लगाना है। यदि कोई सबअरे नहीं है जिसकी लंबाई अधिकतम है या योग 0 के बराबर है तो '0' लौटाएं। उदाहरण के लिए,

इनपुट-1 -

N = 8
A[ ] = {15, -5, -1, 5,1, 4 }

आउटपुट -

4

स्पष्टीकरण - शून्य-योग वाला सबसे बड़ा उप-सरणी { -5, -1, 5, 1} है जिसकी लंबाई 4 है।

इनपुट-2 -

N = 5
A[ ] = {3, 2 ,4, 8, -1}

आउटपुट -

0

स्पष्टीकरण - चूंकि कोई उप-सरणी मौजूद नहीं है जिसका योग शून्य के बराबर है, आउटपुट '0' है।

इस समस्या को हल करने का तरीका

इस विशेष समस्या को हल करने के लिए कई दृष्टिकोण हैं। रैखिक समय O(n) में हल करने के लिए सबसे उपयुक्त एल्गोरिथम हैश तालिका का उपयोग करना है।

विचार एक हैश तालिका बनाने का है जो सभी उप-सरणी का योग संग्रहीत करता है जिसका योग कुंजी और अनुक्रमणिका के रूप में संग्रहीत किया जाता है।

हम पहले पूरे सरणी को पार करेंगे और वर्तमान योग को संग्रहीत करेंगे। हम जांच करेंगे कि हैश तालिका में वर्तमान योग उपलब्ध है या नहीं। यदि यह हैशटेबल में मौजूद है, तो उपसरणी की अधिकतम लंबाई को अपडेट करें।

  • सरणी के N आकार का इनपुट लें।

  • एक फ़ंक्शन lenMax(int ​​*arr, int size) एक सरणी और उसके आकार को इनपुट के रूप में लेता है जो सबएरे की अधिकतम लंबाई देता है जिसमें योग शून्य होता है।

  • पूर्णांकों का एक अनियंत्रित नक्शा जिसमें योग और मान के रूप में कुंजी होती है क्योंकि अनुक्रमणिका यह जांचती है कि कोई योग दोहरा रहा है या नहीं।

  • सरणी तत्व पर पुनरावृति करना और सरणी का वर्तमान योग ज्ञात करना यदि योग हैशटेबल में मौजूद है, तो उप-सरणी की अधिकतम लंबाई ज्ञात करें। यदि नहीं, तो हैशटेबल में नए योग और उसके सूचकांक के साथ डालें।

  • आउटपुट के रूप में अधिकतम लंबाई लौटाएं।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
int lenMax(int *arr, int size){
   unordered_map<int,int>mp;
   int sum=0;
   int maxlen=0;
   for(int i=0;i<size;i++){
      sum+=arr[i];
      if(arr[i]==0 && maxlen==0){
         maxlen=1;
      }
      if(sum==0){
         maxlen=i+1;
      }
      if(mp.find(sum)!= mp.end()){
         maxlen= max(maxlen, i-mp[sum]);
      } else {
         mp[sum]=i;
      }
   }
   return maxlen;
}
int main(){
   int N=6;
   int A[N]={15,-2,2,-8,1,7,10,23};
   cout<<lenMax(A,N)<<endl;
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाएंगे, तो यह आउटपुट को इस रूप में प्रिंट करेगा,

5

योग =0 वाला सबसे बड़ा उप-सरणी {-2, 2, -8, 1, 7} है। इस प्रकार, सबसे बड़े उप-सरणी की लंबाई '5' है।


  1. सी++ में एक सरणी में सबसे बड़ा तत्व खोजने का कार्यक्रम

    इस ट्यूटोरियल में, हम एक प्रोग्राम के बारे में चर्चा करेंगे जो ऐरे में सबसे बड़ा एलीमेंट ढूँढ़ने के लिए है। इसके लिए, हमें एक सरणी प्रदान की जाएगी। हमारा काम सरणी के अंदर के तत्वों से सबसे बड़ी संख्या खोजना है। उदाहरण #include <bits/stdc++.h> using namespace std; //finding largest integer int

  1. सी ++ प्रोग्राम बाइनरी सर्च दृष्टिकोण का उपयोग करके अधिकतम सबएरे योग खोजने के लिए

    बाइनरी सर्च (लॉग एन) की रन-टाइम जटिलता के साथ एक तेज़ खोज एल्गोरिदम है। यह सर्च एल्गोरिदम फूट डालो और जीतो के सिद्धांत पर काम करता है। इस एल्गोरिथम के ठीक से काम करने के लिए, डेटा संग्रह क्रमबद्ध रूप में होना चाहिए। बाइनरी सर्च संग्रह के सबसे मध्य आइटम की तुलना करके किसी विशेष आइटम की तलाश करता है।

  1. सी ++ प्रोग्राम एक स्ट्रिंग की लंबाई का पता लगाने के लिए

    एक स्ट्रिंग एक आयामी वर्ण सरणी है जिसे एक शून्य वर्ण द्वारा समाप्त किया जाता है। स्ट्रिंग की लंबाई शून्य वर्ण से पहले स्ट्रिंग में वर्णों की संख्या है। उदाहरण के लिए। char str[] = “The sky is blue”; Number of characters in the above string = 15 एक स्ट्रिंग की लंबाई ज्ञात करने के लिए एक