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

C++ में समान योग के साथ स्प्लिट ऐरे

मान लीजिए कि हमारे पास n पूर्णांकों के साथ एक सरणी है, हमें यह पता लगाना है कि क्या ट्रिपल (i, j, k) हैं जो इन शर्तों का पालन करते हैं -

  • 0

  • उपसरणियों का योग (0, i-1), (i + 1, j-1), (j + 1, k-1) और (k + 1, n-1) समान होगा।

सबअरे (एल, आर) मूल सरणी का एक टुकड़ा है जो तत्व अनुक्रमित एल से शुरू होकर तत्व अनुक्रमित आर तक शुरू होता है।

इसलिए, अगर इनपुट [1,2,1,2,1,2,1] जैसा है, तो आउटपुट ट्रू होगा, जैसे कि i =1, j =3, k =5।

sum(0, i - 1) = 1 sum(0, 0) = 1
sum(i + 1, j - 1) = 1 sum(2, 2) = 1
sum(j + 1, k - 1) = 1 sum(4, 4) = 1
sum(k + 1, n - 1) = 1 sum(6, 6) = 1

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • n :=अंकों का आकार

  • आकार n के सरणी योग को परिभाषित करें

  • योग [0] :=अंक[0]

  • इनिशियलाइज़ करने के लिए मैं :=1, जब i

    • रकम [i]:=रकम [i] + (अंक [i] + रकम [i - 1])

  • इनिशियलाइज़ j :=3 के लिए, जब j - n, अपडेट करें (j को 1 से बढ़ाएँ), करें -

    • एक सेट को परिभाषित करें

    • इनिशियलाइज़ करने के लिए i :=1, जब i

      • sum1 :=sums[i - 1]

      • sum2 :=sums[j-1] - sums[i]

      • अगर sum1, sum2 के समान है, तो -

        • sum1 को s में डालें

    • इनिशियलाइज़ k :=j + 2 के लिए, जब k

      • sum1 :=sums[k - 1] - sums[j]

      • sum2 :=sums[n - 1] - sums[k]

      • अगर sum1, sum2 के समान है और sum1 s में है, तो -

        • सही लौटें

  • झूठी वापसी

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool splitArray(vector<int>& nums) {
      int n = nums.size();
      vector<int> sums(n);
      sums[0] = nums[0];
      for (int i = 1; i < n; i++) {
         sums[i] += (nums[i] + sums[i - 1]);
      }
      for (int j = 3; j < n; j++) {
         set<int> s;
         for (int i = 1; i < j - 1; i++) {
            int sum1 = sums[i - 1];
            int sum2 = sums[j - 1] - sums[i];
            if (sum1 == sum2)
               s.insert(sum1);
         }
         for (int k = j + 2; k < n - 1; k++) {
            int sum1 = sums[k - 1] - sums[j];
            int sum2 = sums[n - 1] - sums[k];
            if (sum1 == sum2 && s.count(sum1))
               return true;
            }
         }
         return false;
      }
};
main(){
   Solution ob;
   vector<int> v = {1,2,1,2,1,2,1};
   cout << (ob.splitArray(v));
}

इनपुट

{1,2,1,2,1,2,1}

आउटपुट

1

  1. सी ++ में पूर्ण अंतर के न्यूनतम योग के साथ ऐरे तत्व?

    यह कार्यक्रम सरणी के न्यूनतम पूर्ण अंतर को खोजने के लिए है, क्योंकि हमारे पास एक सरणी है जिसमें विशिष्ट तत्व हैं। इस अवधारणा को बेहतर ढंग से सीखने के लिए आवश्यक चीजों को फिर से ब्रश करें, सरणी समान डेटा प्रकार के तत्वों का एक कंटेनर है। सरणी की लंबाई को पूर्वनिर्धारित करने की आवश्यकता है। पूर्ण अं

  1. सी++ सम ऐरे पहेली

    सरणी एक डेटा संरचना है जो एक ही डेटा प्रकार के कई तत्वों को संग्रहीत करती है। यह मूल्यों के पूरे सेट को एक साथ स्टोर कर सकता है। लेकिन इसकी लंबाई पहले से तय करने की जरूरत है। इस योग सरणी पहेली में, हमें एक निश्चित आकार, मान लीजिए n की एक सरणी A1 दी गई है। इस पहेली को हल करने के लिए, हम S1 नामक एक स

  1. सी ++ में एक सम ऐरे पहेली?

    यहां हम सरणी से संबंधित एक दिलचस्प समस्या देखेंगे। n तत्वों के साथ एक सरणी है। हमें n तत्वों की एक और सरणी बनानी है। लेकिन दूसरी सरणी की i-वें स्थिति i-वें तत्व को छोड़कर पहले सरणी के सभी तत्वों का योग धारण करेगी। और एक बाधा यह है कि हम इस समस्या में घटाव ऑपरेटर का उपयोग नहीं कर सकते हैं। यदि हम घट