मान लीजिए कि हमारे पास एक एपीआई है, जो कुछ स्टॉक के लिए दैनिक मूल्य उद्धरण एकत्र करता है, और वर्तमान दिन के लिए उस स्टॉक की कीमत की अवधि लौटाता है। यहां आज स्टॉक की कीमत की अवधि को -
. के रूप में परिभाषित किया गया है- लगातार दिनों की अधिकतम संख्या (आज से शुरू होकर पीछे की ओर जाना) जहां स्टॉक की कीमत आज की कीमत से कम या उसके बराबर थी।
उदाहरण के लिए, यदि हम [100, 80, 60, 70, 60, 75, 85] जैसे 7 दिनों के स्टॉक शेयर रिकॉर्ड देखते हैं, तो स्टॉक अवधि [1, 1, 1, 2, 1, 4, 6] होगी। हमें उस एपीआई के लिए वास्तविक मॉड्यूल लिखना होगा, जिसका उपयोग तब किया जाएगा जब इस मॉड्यूल को कॉल किया जाएगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- सेंट, वी और काउंटर दो सरणियों को परिभाषित करें, काउंटर को 0 के रूप में सेट करें
- काउंटर को 1 से बढ़ाएं
- जबकि सेंट खाली नहीं है और कीमत>=v[स्टैक टॉप एलिमेंट]
- स्टैक से पॉप।
- उत्तर:=काउंटर जब स्टैक खाली हो, अन्यथा उत्तर :=काउंटर – स्टैक टॉप
- वी में मूल्य डालें
- सेंट में काउंटर डालें
- वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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