কম্পিউটার

C++ এ অনলাইন স্টক স্প্যান


ধরুন আমাদের একটি API আছে, যেটি কিছু স্টকের জন্য দৈনিক মূল্যের উদ্ধৃতি সংগ্রহ করে এবং বর্তমান দিনের জন্য সেই স্টকের মূল্যের স্প্যানটি ফেরত দেয়। এখানে আজকের স্টকের দামের স্প্যানকে −

হিসাবে সংজ্ঞায়িত করা হয়েছে
  • সর্বোচ্চ সংখ্যক পরপর দিন (আজ থেকে শুরু করে পিছনের দিকে যাওয়া) যেখানে স্টকের দাম আজকের দামের চেয়ে কম বা সমান ছিল।

উদাহরণস্বরূপ, যদি আমরা 7 দিনের স্টক শেয়ারের রেকর্ড দেখি [100, 80, 60, 70, 60, 75, 85], তাহলে স্টক স্প্যান হবে [1, 1, 1, 2, 1, 4, 6]। আমাদের সেই API-এর জন্য প্রকৃত মডিউল লিখতে হবে, যেটি ব্যবহার করা হবে যখন এই মডিউলটিকে বলা হবে

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

  • দুটি অ্যারে st, v এবং counter সংজ্ঞায়িত করুন, কাউন্টারকে 0 হিসাবে সেট করুন
  • কাউন্টার 1 দ্বারা বাড়ান
  • যদিও st খালি নয় এবং মূল্য>=v[স্ট্যাক টপ এলিমেন্ট]
    • স্ট্যাক থেকে পপ।
  • উত্তর :=স্ট্যাক খালি হলে কাউন্টার, অন্যথায় উত্তর :=কাউন্টার - স্ট্যাক টপ
  • v-এ মূল্য সন্নিবেশ করান
  • st-এ কাউন্টার ঢোকান
  • উত্তর ফেরত দিন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
class StockSpanner {
   public:
   vector <int> st;
   int counter;
   vector <int> v;
   StockSpanner() {
      counter = 0;
   }
   int next(int price) {
      counter++;
      while(!st.empty() && price >= v[st.back() - 1])st.pop_back();
      int ans = st.empty() ? counter : counter - st.back();
      v.push_back(price);
      st.push_back(counter);
      return ans ;
   }
};
main(){
   StockSpanner ob;
   cout <<(ob.next(100)) << endl;
   cout <<(ob.next(80)) << endl;
   cout <<(ob.next(60)) << endl;
   cout <<(ob.next(70)) << endl;
   cout <<(ob.next(60)) << endl;
   cout <<(ob.next(75)) << endl;
   cout <<(ob.next(85)) << endl;
}

ইনপুট

Initialize the class, then call next() method using different values. See the main() method
দেখুন

আউটপুট

1
1
1
2
1
4
6

  1. C++ এর জন্য সেরা অনলাইন টিউটোরিয়ালগুলো কী কী?

  2. লিনাক্সে C++ এর সেরা IDE কি?

  3. লিনাক্সে c++ এর জন্য শীর্ষ IDE কি?

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