কম্পিউটার

সি++ এ স্লাইডিং উইন্ডো সর্বাধিক


ধরুন আমাদের nums নামক একটি অ্যারে আছে, সেখানে 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 68 6
1 3 -1 -3 5 3 688

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি অ্যারে উত্তর সংজ্ঞায়িত করুন

  • একটি ডবল শেষ সারি dq

    সংজ্ঞায়িত করুন
  • যদি সংখ্যার আকার 0 এর মতো হয়, তাহলে উত্তর দিন

  • শুরু করার জন্য i :=0, যখন i দ্বারা বাড়ান

    • যদিও dq খালি নয় এবং nums[dq-এর শেষ উপাদান]

      • dq

        এর শেষ উপাদান মুছে দিন
    • dq

      এর শেষে i ঢোকান
  • শুরু করার জন্য i :=k, যখন i

    • সন্নিবেশ করুন (সংখ্যা [dq-এর সামনের উপাদান]) উত্তরে

    • যখন dq খালি নয় এবং dq <(i-k + 1) এর সামনের উপাদান, do −

      • 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. C++ এ সর্বোচ্চ ব্যবধান

  2. C++ এ সর্বাধিক প্রস্থের র‌্যাম্প

  3. C++ এ চতুর্ভুজের সর্বোচ্চ ক্ষেত্রফল

  4. উইন্ডোতে c++ এর জন্য শীর্ষ IDE কি?