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

सी ++ में सबसेट II

मान लीजिए हमारे पास संख्याओं का एक समूह है; हमें उस समुच्चय के सभी संभावित उपसमुच्चय उत्पन्न करने होंगे। इसे पावर सेट के रूप में भी जाना जाता है। हमें यह ध्यान रखना होगा कि तत्व डुप्लिकेट हो सकते हैं। तो अगर सेट [1,2,2] जैसा है, तो पावर सेट [[], [1], [2], [1,2], [2,2], [1,2,2] होगा। ]]

आइए चरणों को देखें -

  • एक सरणी रेस और दूसरे सेट को परिभाषित करें जिसे x कहा जाता है
  • हम इसे पुनरावर्ती दृष्टिकोण का उपयोग करके हल करेंगे। इसलिए यदि पुनरावर्ती विधि नाम को हल () कहा जाता है, और यह अनुक्रमणिका, एक अस्थायी सरणी, और संख्याओं की सरणी (अंक) लेता है
  • हल करें () फ़ंक्शन नीचे की तरह काम करेगा -
  • यदि सूचकांक =वी का आकार, तो
    • यदि x में temp मौजूद नहीं है, तो temp को res में डालें और temp को x में भी डालें
    • वापसी
  • कॉल सॉल्व (इंडेक्स + 1, टेम्प, वी)
  • अस्थायी में v[index] डालें
  • कॉल सॉल्व (इंडेक्स + 1, टेम्प, वी)
  • अस्थायी से अंतिम तत्व निकालें
  • मुख्य समारोह नीचे जैसा होगा -
  • रेस और एक्स को साफ़ करें, और दिए गए सरणी को सॉर्ट करें, एक सरणी अस्थायी परिभाषित करें
  • कॉल समाधान(0, अस्थायी, सरणी)
  • रेस ऐरे को सॉर्ट करें और रेस वापस करें

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<int> > v){
      cout << "[";
      for(int i = 0; i<v.size(); i++){
         cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector < vector <int> > res;
   set < vector <int> > x;
   static bool cmp(vector <int> a, vector <int> b){
      return a < b;
   }
   void solve(int idx, vector <int> temp, vector <int> &v){
      if(idx == v.size()){
         if(x.find(temp) == x.end()){
            res.push_back(temp);
            x.insert(temp);
         }
         return;
      }
      solve(idx+1, temp, v);
      temp.push_back(v[idx]);
      solve(idx+1, temp, v);
      temp.pop_back();
   }
   vector<vector<int> > subsetsWithDup(vector<int> &a) {
      res.clear();
      x.clear();
      sort(a.begin(), a.end());
      vector <int> temp;
      solve(0, temp, a);
      sort(res.begin(), res.end(), cmp);
      return res;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,2};
   print_vector(ob.subsetsWithDup(v));
}

इनपुट

[1,2,2]

आउटपुट

[[],[1, ],[1, 2, ],[1, 2, 2, ],[2, ],[2, 2, ],]

  1. वेक्टर ::आकार () बनाम वेक्टर ::रिजर्व () सी ++ में

    जब कोई तत्व डाला या हटाया जाता है, तो वेक्टर स्वचालित रूप से गतिशील सरणी की तरह आकार बदलने की क्षमता रखता है, कंटेनर स्वचालित रूप से अपने भंडारण को संभालता है। वेक्टर आकार () और वेक्टर रिजर्व () के बीच मुख्य अंतर यह है कि आकार बदलने () का उपयोग वेक्टर के आकार को बदलने के लिए किया जाता है जहां रिजर्

  1. C++ में Inference टाइप करें

    टाइप अनुमान या कटौती एक प्रोग्रामिंग भाषा में डेटा प्रकार के एक अभिव्यक्ति की स्वचालित पहचान को संदर्भित करता है। यह कुछ दृढ़ता से टाइप की गई भाषाओं में मौजूद एक विशेषता है। सी ++ में, ऑटो कीवर्ड (सी ++ 11 में जोड़ा गया) का उपयोग स्वचालित प्रकार की कटौती के लिए किया जाता है। उदाहरण के लिए, आप एक वेक

  1. पायथन में सबसेट

    मान लीजिए हमारे पास संख्याओं का एक समूह है; हमें उस समुच्चय के सभी संभावित उपसमुच्चय उत्पन्न करने होंगे। इसे पावर सेट के रूप में भी जाना जाता है। तो अगर सेट [1,2,3] जैसा है, तो पावर सेट [[], [1], [2], [3], [1,2], [1,3], [2 होगा। ,3], [1,2,3]] आइए चरणों को देखें - हम इसे पुनरावर्ती दृष्टिकोण का उपय