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

सी ++ में दिए गए सरणी के लिए सभी अद्वितीय सबरेरे योग का योग खोजें

इस समस्या में, हमें n पूर्णांक मानों से युक्त एक सरणी arr[] दिया जाता है। हमारा काम किसी दिए गए सरणी के लिए सभी अद्वितीय सबअरे योग का योग ज्ञात करना है . सबअरे योग दिए गए सबअरे के तत्वों का योग है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

Input : arr[] = {1, 2, 4}
Output : 23

स्पष्टीकरण -

All subarrays of the given array are :
(1), (2), (4), (1, 2), (2, 4), (1, 2, 4)
Sum of subarrays = 1 + 2 + 4 + (1+2) + (2+4) + (1+2+4) = 23

समाधान दृष्टिकोण

समस्या का एक समाधान सबअरे योग को संग्रहीत करके और फिर उन्हें एक बार अद्वितीय खोजने के लिए क्रमबद्ध करना है। फिर हम योग के लिए सभी अद्वितीय उपसरणियों पर विचार करेंगे।

एल्गोरिदम

चरण 1 - सभी उप-सरणी का योग ज्ञात करें और इसे एक वेक्टर में संग्रहीत करें।

चरण 2 - सदिश क्रमित करें।

चरण 3 − उन सभी सदिशों पर विचार करें जो अद्वितीय हैं और शेष के योग को 0 से चिह्नित करें।

चरण 4 - योग की गणना करें और प्रिंट करें।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <bits/stdc++.h>
using namespace std;
long int findSumOfSubArraySum(int arr[], int n){
   int i, j;
   long int sumArrayTill[n + 1] = { 0 };
   for (i = 0; i < n; i++)
      sumArrayTill[i + 1] = sumArrayTill[i] + arr[i];
   vector<long int> subArraySum;
   for (i = 1; i <= n; i++)
      for (j = i; j <= n; j++)
        subArraySum.push_back(sumArrayTill[j] - sumArrayTill[i - 1]);
   sort(subArraySum.begin(), subArraySum.end());
   for (i = 0; i < subArraySum.size() - 1; i++){
      if (subArraySum[i] == subArraySum[i + 1]) {
         j = i + 1;
         while (subArraySum[j] == subArraySum[i] && j < subArraySum.size()){
            subArraySum[j] = 0; j++;
         }
         subArraySum[i] = 0;
      }
   }
   long sum = 0;
   for (i = 0; i < subArraySum.size(); i++)
      sum += subArraySum[i];
   return sum;
}
int main(){
   int arr[] = { 1, 2, 4, 7, 9 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The sum of all unique subarray sum is "<<findSumOfSubArraySum(arr, n);
   return 0;
}

आउटपुट

The sum of all unique subarray sum is 144

Iteration का उपयोग करने वाला दूसरा तरीका

समस्या को हल करने का एक और तरीका हैश टेबल का उपयोग करना है। हम सबएरे रकम ढूंढेंगे और उन्हें हैश टेबल और इंक्रीमेंट हैश काउंट में स्टोर करेंगे। फिर सभी अद्वितीय उपसरणियों का योग ज्ञात करें (हैश काउंट 1 के साथ उप-सरणी)।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <bits/stdc++.h>
using namespace std;
long int findSumOfSubArraySum(int arr[], int n){
   int sumSubArraySum = 0;
   unordered_map<int, int> sumSubArray;
   for (int i = 0; i < n; i++) {
      int sum = 0;
      for (int j = i; j < n; j++) {
         sum += arr[j];
         sumSubArray[sum]++;
      }
   }
   for (auto itr : sumSubArray)
      if (itr.second == 1)
         sumSubArraySum += itr.first;
      return sumSubArraySum;
}
int main(){
   int arr[] = { 1, 2, 4, 7, 5 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The sum of all unique subarray sum is "<<findSumOfSubArraySum(arr, n);
   return 0;
}

आउटपुट

The sum of all unique subarray sum is 124

  1. C++ में दिए गए बाइनरी ट्री में सभी दाएँ पत्तों का योग ज्ञात कीजिए

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम है किसी दिए गए बाइनरी ट्री में सभी बाएँ दाएँ का योग ज्ञात करना । समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट : आउटपुट :8 स्पष्टीकरण - All leaf nodes of the tree are : 1, 8 Sum = 1 + 8 = 9 समाधान दृष्टिकोण समस्या का एक सरल समाधान

  1. C++ में दिए गए बाइनरी ट्री में सभी बायीं पत्तियों का योग ज्ञात करें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम है किसी दिए गए बाइनरी ट्री में सभी बाईं पत्तियों का योग ज्ञात करना । समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: आउटपुट:11 स्पष्टीकरण - All leaf nodes of the tree are : 2, 9 Sum = 2 + 9 = 11 समाधान दृष्टिकोण समस्या का एक सरल समाधा

  1. C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें

    मान लीजिए कि हमारे पास एक सकारात्मक पूर्णांक L है, जो एक पूर्ण बाइनरी ट्री में स्तरों की संख्या का प्रतिनिधित्व करता है। इस परफेक्ट बाइनरी ट्री में लीफ नोड्स की संख्या 1 से n तक होती है। जहां n लीफ नोड्स की संख्या है। पैरेंट नोड बच्चों का योग है। हमारा काम इस परफेक्ट बाइनरी ट्री के सभी नोड्स के योग