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

C++ में योग शून्य वाले सभी उपसरणी (Subarrays) प्रिंट करें


इस समस्या में, हमें पूर्णांक मानों की एक सरणी दी गई है और हमें इस सरणी से उन सभी उपसरणी को प्रिंट करना है जिनका योग 0 के बराबर है।

विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं,

इनपुट: सरणी = [-5, 0, 2, 3, -3, 4, -1] आउटपुट: इंडेक्स 1 से 4 तक उपसरणी का योग 0 है। इंडेक्स 5 से 7 तक उपसरणी का योग 0 है। इंडेक्स 0 से 7 तक उपसरणी का योग 0 है।

इस समस्या को हल करने के लिए, हम सभी संभावित उपसरणी की जांच करेंगे। और जांचेंगे कि क्या इन उपसरणी का योग 0 के बराबर है और उन्हें प्रिंट करेंगे। यह समाधान समझने में आसान है लेकिन समाधान जटिल है, और इसकी समय जटिलता O(n^2) क्रम की है।

इस समस्या का एक बेहतर समाधान हैशिंग का उपयोग करना है। इसे हल करने के लिए हम योग ढूंढेंगे यदि यह 0 के बराबर है तो इसे हैश टेबल में जोड़ देंगे।

एल्गोरिदम

चरण 1: एक योग वेरिएबल बनाएं। चरण 2: यदि योग = 0, तो उपसरणी सरणी के इंडेक्स 0 से अंतिम इंडेक्स तक शुरू होती है। चरण 3: यदि वर्तमान योग हैश टेबल में है। चरण 4: यदि योग मौजूद है, तो i+1 से n तक की उपसरणी शून्य होनी चाहिए। चरण 5: अन्यथा हैश टेबल में डालें।

उदाहरण

#include <bits/stdc++.h> using namespace std; vector< pair<int, int> > findSubArrayWithSumZero(int arr[], int n){    unordered_map<int, vector<int> >map;    vector <pair<int, int>> out;    int sum = 0;    for (int i = 0; i < n; i++){       sum += arr[i];       if (sum == 0)          out.push_back(make_pair(0, i));       if (map.find(sum) != map.end()){          vector<int> vc = map[sum];          for (auto it = vc.begin(); it != vc.end(); it++)             out.push_back(make_pair(*it + 1, i));       }       map[sum].push_back(i);    }    return out; } int main(){    int arr[] = {-5, 0, 2, 3, -3, 4, -1};    int n = sizeof(arr)/sizeof(arr[0]);    vector<pair<int, int> > out = findSubArrayWithSumZero(arr, n);    if (out.size() == 0)       cout << "No subarray exists";    else       for (auto it = out.begin(); it != out.end(); it++)          cout<<"Subarray with sum 0 is from "<<it->first <<" to "<<it->second<<endl;    return 0; }

आउटपुट

Subarray with sum 0 is from 1 to 1 Subarray with sum 0 is from 0 to 3 Subarray with sum 0 is from 3 to 4 Subarray with sum 0 is from 0 to 6 Subarray with sum 0 is from 4 to 6

  1. - C++ में दिए गए योग वाले सभी युग्म प्रिंट करें

    इस समस्या में, हमें पूर्णांकों की एक सरणी और एक पूर्णांक योग दिया गया है और हमें उन सभी पूर्णांक युग्मों को प्रिंट करना है जिनका योग योग मान के बराबर है। समस्या को समझने के लिए एक उदाहरण लेते हैं : इनपुट - सरणी = {1, 6, -2, 3} योग = 4 आउटपुट - (1, 3) , (6, -2) यहां, हमें दिए गए योग मान वाले युग्म चा

  1. - C++ में आकार K के M नॉन-ओवरलैपिंग सबएरे का अधिकतम योग

    समस्या कथन एक ऐरे और दो संख्याएं M और K दी गई हैं। हमें ऐरे में आकार K के अधिकतम M सबएरे का योग ढूंढना है (नॉन-ओवरलैपिंग)। (ऐरे का क्रम अपरिवर्तित रहता है)। K सबएरे का आकार है और M सबएरे की संख्या है। यह माना जा सकता है कि ऐरे का आकार m*k से अधिक है। यदि कुल ऐरे का आकार k का गुणक नहीं है, तो हम आंश

  1. - C++ में सभी सबसीक्वेंस के योग का योग ढूंढें

    मान लीजिए हमारे पास n एलिमेंट्स वाला एक ऐरे A है। हमें ऐरे के सभी सबसेट के योग का कुल योग ढूंढना है। तो यदि ऐरे A = [5, 6, 8] जैसा है, तो यह होगा - सबसेट योग 5 5 6 6 8 8 5,6 11 6,8 14 5,8 13 5,6,8 19 कुल योग 76 जैसा कि ऐरे में n एलिमेंट्स हैं, तो हमारे पास 2ⁿ संख्या में सबस