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

स्लाइडिंग विंडो अधिकतम C++ में

मान लीजिए कि हमारे पास अंक नामक एक सरणी है, आकार k की एक स्लाइडिंग विंडो है जो सरणी के बाईं ओर से दाईं ओर जा रही है। हम विंडो में केवल k नंबर देख सकते हैं। हर बार स्लाइडिंग विंडो एक स्थिति से दाईं ओर चलती है। हमें अधिकतम स्लाइडिंग विंडो ढूंढनी होगी। तो अगर इनपुट −[1,3,-1,-3,5,3,6,8] जैसा है और k 3 है, तो विंडो इस तरह होगी -

<थ>अधिकतम
विंडो स्थिति
1 3 -1 -3 5 3 6 8 3
1 3 -1 -3 5 3 6 8 3
1 3 -1 -3 5 3 6 8 3
1 3 -1 -3 5 3 6 8 5
1 3 -1 -3 5 3 6 8 6
1 3 -1 -3 5 3 6 8 8

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

  • एक सरणी को परिभाषित करें ans

  • एक डबल एंडेड क्यू परिभाषित करें dq

  • यदि अंकों का आकार 0 के समान है, तो उत्तर दें

  • प्रारंभ करने के लिए i :=0, जब i

    • जबकि dq खाली नहीं है और nums[dq का अंतिम तत्व]

      • dq का अंतिम तत्व हटाएं

    • dq के अंत में i डालें

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

    • उत्तर में डालें (अंक [dq का अगला तत्व])

    • जबकि dq खाली नहीं है और dq <(i-k + 1) का अगला तत्व है, तो −

      करें
      • dq से सामने का तत्व हटाएं

    • जबकि dq खाली नहीं है और nums[dq का अंतिम तत्व]

      • dq का अंतिम तत्व हटाएं

    • dq के अंत में i डालें

  • अंत में nums[dq के सामने वाले तत्व] को उत्तर में डालें

  • वापसी उत्तर

उदाहरण

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

#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;
}
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<int> maxSlidingWindow(vector<int>& nums, int k) {
      vector <int> ans;
      deque <int> dq;
      if(nums.size()==0)return ans;
      for(int i =0;i<k;i++){
         while(!dq.empty() && nums[dq.back()]<nums[i])dq.pop_back();
         dq.push_back(i);
      }
      for(int i = k;i<nums.size();i++){
         ans.push_back(nums[dq.front()]);
         while(!dq.empty() && dq.front()<(i-k + 1))dq.pop_front();
         while(!dq.empty() && nums[dq.back()]<nums[i])dq.pop_back();
         dq.push_back(i);
      }
      ans.push_back(nums[dq.front()]);
      return ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,3,-1,-3,5,3,6,8};
   print_vector(ob.maxSlidingWindow(v,3));
}

इनपुट

{1,3,-1,-3,5,3,6,8}

आउटपुट

[3, 3, 5, 5, 6, 8, ]

  1. सी ++ में अधिकतम चौड़ाई रैंप

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी A है, एक रैंप एक टपल (i, j) है जिसके लिए i

  1. C++ . में चतुर्भुज का अधिकतम क्षेत्रफल

    समस्या कथन चतुर्भुज a, b, c, d की चार भुजाओं को देखते हुए दी गई भुजाओं से चतुर्भुज का अधिकतम क्षेत्रफल ज्ञात कीजिए। एल्गोरिदम इस समस्या को हल करने के लिए हम नीचे ब्रह्मगुप्त के सूत्र का उपयोग कर सकते हैं - (s-a)(s-b)(s-c)(s-d) उपरोक्त सूत्र में s अर्ध-परिधि है। इसकी गणना इस प्रकार की जाती है -

  1. विंडो पर c++ के लिए शीर्ष IDE क्या है?

    केवल टेक्स्ट एडिटर्स पर बड़े प्रोजेक्ट्स को मैनेज करना मुश्किल है। यदि आप ऐसे मामलों में आईडीई का उपयोग करते हैं तो आप अधिक उत्पादक और कम निराश होने की संभावना रखते हैं। विभिन्न प्रकार के आईडीई हैं और आपको अपनी आवश्यकताओं के अनुरूप सही का चयन करना चाहिए। यहां विंडो के लिए सर्वश्रेष्ठ C/C++ IDE की सू