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

सी++ में अधिकतम संख्या बनाएं

मान लीजिए कि हमारे पास लंबाई के दो सरणियाँ हैं m और n जिसमें अंक 0-9 हैं जो दो संख्याओं का प्रतिनिधित्व करते हैं। हमें लंबाई k की अधिकतम संख्या बनानी होगी जो कि दोनों के अंकों से m + n से कम हो। हमें यह ध्यान रखना होगा कि एक ही सरणी से अंकों के सापेक्ष क्रम को संरक्षित किया जाना चाहिए। हमें k अंकों का सरणी ज्ञात करना है। तो अगर इनपुट [3,4,7,5] और [9,1,3,5,8,4], और के =5 जैसे हैं, तो उत्तर [9,8,7,5,4] होगा ].

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

  • एक फ़ंक्शन को परिभाषित करें mergeThem(), यह एक सरणी nums1, एक सरणी nums2,
  • लेगा
  • एक सरणी रिट परिभाषित करें
  • i :=0, j :=0, n :=nums1 का आकार, m :=nums2 का आकार
  • जबकि (i
  • यदि फ़ंक्शन को बड़ा कहते हैं(nums1, nums2, i, j) सत्य है, तो −
    • रिटर्न के अंत में nums1[i] डालें
    • (मैं 1 से बढ़ाएँ)
  • अन्यथा
    • रिटर्न के अंत में nums2[j] डालें
    • (j को 1 से बढ़ाएं)
  • रिटर्न रिटर्न
  • एक फ़ंक्शन को परिभाषित करें संशोधित करें(), यह एक सरणी लेगा v, k,
  • एक स्टैक सेंट परिभाषित करें
  • एक सरणी रिट परिभाषित करें
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • x :=v[i]
  • जबकि (st खाली नहीं है और st का शीर्ष तत्व =k), करते हैं −
    • सेंट से एलीमेंट हटाएं
  • यदि st
  • x को सेंट में डालें
  • जबकि (सेंट खाली नहीं है), करें −
    • सेवा के अंत में सेंट का शीर्ष तत्व डालें
    • सेंट से एलीमेंट हटाएं
  • सरणी को उलट दें
  • रिटर्न रिटर्न
  • एक फ़ंक्शन को अधिक से अधिक परिभाषित करें (), यह एक सरणी लेगा a, एक सरणी b, i, j,
  • जबकि (i
  • i को 1 से बढ़ाएँ और j को 1 से बढ़ाएँ
  • सही लौटें जब j ==b का आकार या i b[j]
  • मुख्य विधि से निम्न कार्य करें:
  • एक सरणी रिट परिभाषित करें
  • n :=nums1 का आकार
  • m :=nums2 का आकार
  • इनिशियलाइज़ i :=0 के लिए, जब i <=k, अपडेट करें (i को 1 से बढ़ाएँ), −
      करें
    • यदि मैं <=n और (k - i) <=m, तो −
      • एक सरणी उम्मीदवार को परिभाषित करें =उन्हें मर्ज करें (संशोधित करें (nums1, i), संशोधित करें (nums2, k - i))
      • यदि बड़ा (उम्मीदवार, सेवानिवृत्त, 0, 0) सत्य है, तो -
      • सेवानिवृत्त:=उम्मीदवार
  • रिटर्न रिटर्न
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
    public:
       vector<int> mergeThem(vector<int> nums1, vector<int> nums2)
       {
          vector<int> ret;
          int i = 0;
          int j = 0;
          int n = nums1.size();
          int m = nums2.size();
          while (i < n || j < m) {
             if (greater(nums1, nums2, i, j)) {
                ret.push_back(nums1[i]);
                i++;
             }
             else {
                ret.push_back(nums2[j]);
                j++;
             }
          }
          return ret;
       }
       vector<int> modify(vector<int>& v, int k)
       {
          stack<int> st;
          vector<int> ret;
          for (int i = 0; i < v.size(); i++) {
             int x = v[i];
             while (!st.empty() && st.top() < x && st.size() + (v.size() - i) - 1 >= k) {
                st.pop();
             }
             if (st.size() < k)
                st.push(x);
             }
             while (!st.empty()) {
                ret.push_back(st.top());
                st.pop();
             }
             reverse(ret.begin(), ret.end());
             return ret;
          }
          bool greater(vector<int>& a, vector<int>& b, int i, int j)
          {
             while (i < a.size() && j < b.size() && a[i] == b[j])
             i++, j++;
             return j == b.size() || (i < a.size() && a[i] > b[j]);
          }
          vector<int> maxNumber(vector<int>& nums1, vector<int>& nums2, int k)
          {
             vector<int> ret;
             int n = nums1.size();
             int m = nums2.size();
             for (int i = 0; i <= k; i++) {
                if (i <= n && (k - i) <= m) {
                   vector<int> candidate = mergeThem(modify(nums1, i), modify(nums2, k - i));
                   if (greater(candidate, ret, 0, 0)) {
                      ret = candidate;
                   }
                }
             }
             return ret;
         }
    };
    main() {
       Solution ob;
       vector<int> v = { 3, 4, 7, 5 }, v1 = { 9, 1, 3, 5, 8, 4 };
       print_vector(ob.maxNumber(v, v1, 5));
    }

    इनपुट

    { 3, 4, 7, 5 }
    { 9, 1, 3, 5, 8, 4 }
    5

    आउटपुट

    [9, 8, 7, 5, 4, ]

    1. C++ में मितव्ययी संख्या

      इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है। हमारा कार्य यह जाँचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या - एक संख्या जिसके अंकों की संख्या दी गई संख्या के अभाज्य गुणनखंड में अंकों की संख्या से अधिक है। उदाहरण − 625, संख्या 625 का अभाज्

    1. सी++ पेंटाटोप नंबर

      पास्कल के त्रिभुज में एक पंचकोण संख्या को पाँचवीं संख्या के रूप में वर्णित किया गया है। अब, जैसा कि आप जानते हैं, यह पांचवीं संख्या है, तो इसका मतलब है कि हमारे पास पास्कल के त्रिकोण में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है। पास्कल त्रिभुज की

    1. सी ++ पथ लंबाई जिसमें अधिकतम संख्या में मोड़ हैं

      एक समस्या को हल करने के लिए जिसमें हमें एक बाइनरी ट्री दिया जाता है। अब हमें उस पथ को खोजने की आवश्यकता है जिसमें अधिकतम संख्या में मोड़ हों। यानी, एक मोड़ तब माना जाता है जब पथ की दिशा बाएं से दाएं या इसके विपरीत बदलती है, उदाहरण के लिए इनपुट - आउटपुट - 6 अब इस दृष्टिकोण में, हम पेड़ से गुजरें