मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी A है, तो हमें इस शर्त को पूरा करने वाले गैर-रिक्त निरंतर उप-सरणियों की संख्या ज्ञात करनी होगी:उप-सरणी का सबसे बायां तत्व उप-सरणी में अन्य तत्वों से बड़ा नहीं है।
इसलिए, यदि इनपुट [1,4,2,5,3] जैसा है, तो आउटपुट 11 होगा, क्योंकि 11 वैध उप-सरणी हैं, वे [1],[4],[2],[5 की तरह हैं ], [3], [1,4], [2,5], [1,4,2], [2,5,3], [1,4,2,5], [1,4,2] ,5,3].
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रिट:=0
-
n :=अंकों का आकार
-
एक स्टैक सेंट परिभाषित करें
-
इनिशियलाइज़ i :=0 के लिए, जब i <अंकों का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -
-
एक्स:=अंक [i]
-
जबकि (सेंट खाली नहीं है और x <सेंट का शीर्ष तत्व), करते हैं -
-
सेंट से तत्व हटाएं
-
-
सेंट में x डालें
-
ret :=st + ret का आकार
-
-
वापसी रिट
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: int validSubarrays(vector<int>& nums) { int ret = 0; int n = nums.size(); stack <int> st; for(int i = 0; i < nums.size(); i++){ int x = nums[i]; while(!st.empty() && x < st.top()) st.pop(); st.push(x); ret += st.size(); } return ret; } }; main(){ Solution ob; vector<int> v = {1,4,2,5,3}; cout << (ob.validSubarrays(v)); }
इनपुट
{1,4,2,5,3}
आउटपुट
11