मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी 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