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

प्रत्येक k आकार के सन्निहित उप-सरणी का अधिकतम पता लगाने के लिए C++ प्रोग्राम

मान लीजिए कि हमारे पास n तत्वों और एक मान k के साथ एक सरणी है। हमें k आकार के प्रत्येक सन्निहित उप-सरणी के लिए अधिकतम मान ज्ञात करना होगा।

इसलिए, यदि इनपुट arr =[3,4,6,2,8], k =3 जैसा है, तो आउटपुट आकार 3 के सन्निहित उप-सरणी होंगे [3,4,6], [4,6, 2], [6,2,8], इसलिए अधिकतम तत्व 6, 6 और 8 हैं।

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

  • क आकार k का एक deque Qi परिभाषित करें
  • इनिशियलाइज़ i :=0 के लिए, जब i
  • जबकि क्यूई खाली नहीं है और गिरफ्तारी[i]>=arr[क्यूई का अंतिम तत्व], करें:
    • क्यूई से अंतिम तत्व हटाएं
  • क्यूई के अंत में i डालें
  • के लिए मैं <गिरफ्तारी का आकार, अद्यतन (मैं 1 से बढ़ाएँ), यह करें:
    • प्रदर्शन गिरफ्तारी [क्यूई का पहला तत्व]
    • जबकि क्यूई खाली नहीं है और क्यूई का पहला तत्व <=i - k, करें:
      • क्यूई से फ्रंट एलिमेंट हटाएं
    • जबकि क्यूई खाली नहीं है और गिरफ्तारी[i]>=arr[क्यूई का अंतिम तत्व], करें:
      • क्यूई से अंतिम तत्व हटाएं
    • क्यूई के अंत में i डालें
  • प्रदर्शन गिरफ्तारी [क्यूई का पहला तत्व]
  • उदाहरण

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

    #include <iostream>
    #include <vector>
    #include <deque>
    using namespace std;
    int main(){
       vector<int> arr = {3,4,6,2,8};
       int k = 3;
       deque<int> Qi(k);
       int i;
       for (i = 0; i < k; ++i){
          while ( (!Qi.empty()) && arr[i] >= arr[Qi.back()])
             Qi.pop_back();
    
             Qi.push_back(i);
         }
         for ( ; i < arr.size(); ++i){
            cout << arr[Qi.front()] << " ";
            while ( (!Qi.empty()) && Qi.front() <= i - k)
                Qi.pop_front();
            while ( (!Qi.empty()) && arr[i] >= arr[Qi.back()])
                Qi.pop_back();
            Qi.push_back(i);
        }
        cout << arr[Qi.front()] << endl;
    }
    

    इनपुट

    {3,4,6,2,8}, 3

    आउटपुट

    6 6 8

    1. पायथन में एक अच्छे सबअरे का अधिकतम स्कोर खोजने का कार्यक्रम

      मान लीजिए कि हमारे पास nums नामक एक सरणी है और एक मान k है। एक सबअरे के स्कोर पर विचार करें (i, j) को न्यूनतम सबअरे अंकों के रूप में परिभाषित किया गया है [i..j] * (j-i + 1)। अब, एक अच्छा सबअरे एक सबअरे है जहाँ i <=k <=j. हमें एक अच्छे सबअरे का अधिकतम संभव स्कोर खोजना होगा। इसलिए, यदि इनपुट अंकों की

    1. पायथन में अधिकतम सबरे मिन-प्रोडक्ट खोजने का कार्यक्रम

      मान लीजिए कि हमारे पास एक सरणी संख्या है, हमें प्रत्येक गैर-खाली उप-अंकों के अधिकतम न्यूनतम-उत्पाद को खोजना होगा। चूंकि उत्तर काफी बड़ा हो सकता है, इसे मॉड्यूलो 10^9+7 में लौटाएं। सरणी का न्यूनतम-उत्पाद सरणी के योग से गुणा किए गए सरणी में न्यूनतम मान के बराबर है। तो अगर हमारे पास एक सरणी है जैसे [4,

    1. पायथन में सन्निहित उपसरणी का अधिकतम उत्पाद खोजने का कार्यक्रम

      मान लीजिए कि हमारे पास अंक नामक एक सरणी है, हमें एक सरणी के भीतर एक सन्निहित उपसरणी के तत्वों का उत्पाद खोजना होगा (जिसमें कम से कम एक संख्या हो) जिसमें सबसे बड़ा उत्पाद हो। तो अगर सरणी [1,9,2,0,2,5] है, तो आउटपुट 18 होगा, क्योंकि सन्निहित उपसरणी [1,9,2] में अधिकतम उत्पाद है। इसे हल करने के लिए, हम