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

C++ में बढ़ते क्रम

मान लीजिए कि हमारे पास एक पूर्णांक सरणी है, हमारा कार्य दिए गए सरणी के सभी अलग-अलग संभावित बढ़ते क्रमों को खोजना है, और बढ़ते क्रम की लंबाई कम से कम 2 होनी चाहिए। इसलिए यदि सरणी [4,6,7,7] की तरह है ], तो आउटपुट जैसा होगा - [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7 , 7], [7,7], [4,7,7]]।

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

  • सभी परिणामों को संग्रहीत करने के लिए res नामक एक सरणी को परिभाषित करें
  • हल नामक एक विधि बनाएं। यह अंक सरणी, प्रारंभ और अस्थायी सरणी लेगा
  • यदि अस्थायी का आकार> 1 है, तो अस्थायी को रेस में डालें
  • विज़िट नाम का एक सेट बनाएं
  • के लिए मैं रेंज में अंकों के आकार के लिए शुरू करते हैं
    • x :=nums[i]
    • यदि x विज़िट किए गए सेट में है, तो लूप के अगले भाग को छोड़ दें
    • विज़िट किए गए सेट में x डालें
    • यदि अस्थायी खाली है या अस्थायी का अंतिम तत्व <=x है, तो
      • अस्थायी में x डालें
      • कॉल सॉल्व (अंक, i + 1, अस्थायी)
      • अस्थायी के अंत से एक तत्व हटाएं
  • मुख्य विधि से, कॉल हल करें(nums, 0, temp)
  • रिटर्न रेस

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto> > 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;
   void solve( vector <int>& nums, int start, vector <int> temp){
      if(temp.size() > 1){
         res.push_back(temp);
      }
      set <int> visited;
      for(int i = start; i < nums.size(); i++){
         int x = nums[i];
         if(visited.count(x))continue;
         visited.insert(x);
         if(temp.empty() || temp[temp.size() - 1] <= x){
            temp.push_back(x);
            solve(nums, i + 1, temp);
            temp.pop_back();
         }
      }
   }
   vector<vector<int>> findSubsequences(vector<int>& nums) {
      res.clear();
      vector <int> temp;
      solve(nums, 0, temp);
      return res;
   }
};
main(){
   vector<int> v = {5,6,7,8};
   Solution ob;
   print_vector(ob.findSubsequences(v));
}

इनपुट

[4,6,7,8]

आउटपुट

[[5, 6, ],[5, 6, 7, ],[5, 6, 7, 8, ],[5, 6, 8, ],[5, 7, ],[5, 7, 8, ],[5, 8, ],[6, 7, ],[6, 7, 8, ],[6, 8, ],[7, 8, ],]

  1. C++ . में संयोजन योग II

    मान लीजिए कि हमारे पास उम्मीदवार संख्याओं का एक सेट है (सभी तत्व अद्वितीय हैं) और एक लक्ष्य संख्या है। हमें उम्मीदवारों में सभी अद्वितीय संयोजन खोजने होंगे जहां उम्मीदवार संख्या दिए गए लक्ष्य के योग हो। उम्मीदवारों में से एक ही नंबर को एक से अधिक बार नहीं चुना जाएगा। इसलिए यदि तत्व [2,3,6,7,8] हैं औ

  1. सी ++ में 3सम निकटतम

    मान लीजिए कि हमारे पास n पूर्णांकों और एक लक्ष्य के साथ एक सरणी संख्या है। हमें अंकों में तीन पूर्णांक इस प्रकार ज्ञात करने हैं कि योग लक्ष्य के सबसे निकट हो। हम तीन पूर्णांकों का योग वापस कर देंगे। हम एक धारणा ले सकते हैं कि प्रत्येक इनपुट का ठीक एक समाधान होगा। तो अगर दी गई सरणी [-1,2,1,-4] की तरह

  1. सी ++ में संयोजन

    मान लीजिए कि हमारे पास दो पूर्णांक n और k हैं। हमें 1 ... n में से k संख्याओं के सभी संभावित संयोजनों को खोजना है। तो अगर n =4 और k =2, तो संयोजन [[1,2], [1,3], [1,4], [2,3], [2,4], [3,4 होंगे। ]] इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - हम इसे हल करने के लिए पुनरावर्ती फ़ंक्शन का उपयोग कर