किसी भी (सन्निहित) सबअरे बी (ए के) पर विचार करें जिसे पर्वत कहा जाता है यदि निम्नलिखित गुण हैं -
- बी का आकार>=3
- कुछ 0 B[i+1]> । ..> बी[बी.लंबाई - 1]
मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी A है; हमें सबसे लंबे पर्वत की लंबाई ज्ञात करनी है। पहाड़ न होने पर हमें 0 वापस करना होगा। तो अगर इनपुट [2,1,4,7,3,2,5] जैसा है, तो परिणाम 5 होगा। तो सबसे बड़ा पर्वत [1,4,7,3,2] होगा, जिसकी लंबाई है 5.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- ret :=0, n :=array का आकार a
- i :=0 से n – 1, i को j + 1 से बढ़ाएँ
- j :=i
- नीचे:=झूठा, ऊपर:=झूठा
- जबकि j + 1
a[j] - ऊपर :=सत्य और j को 1 से बढ़ाएं
- जबकि ऊपर सत्य है और j + 1
a[j] - नीचे :=सच है और j को 1 से बढ़ाएं
- यदि ऊपर और नीचे दोनों सत्य हैं, तो रिट सेट करें:=अधिकतम j - i + 1 और रिट, j को 1 से घटाएं
- रिटर्न रिट।
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int longestMountain(vector<int>& a) {
int ret = 0;
int n = a.size();
int j;
for(int i = 0; i < n; i = j + 1){
j = i;
bool down = false;
bool up = false;
while(j + 1 < n && a[j + 1] > a[j]) {
up = true;
j++;
}
while(up && j + 1 < n && a[j + 1] < a[j]){
down = true;
j++;
}
if(up && down){
ret = max(j - i + 1, ret);
j--;
}
}
return ret;
}
};
main(){
vector<int> v = {2,1,4,7,3,2,5};
Solution ob;
cout << (ob.longestMountain(v));
} इनपुट
[2,1,4,7,3,2,5]
आउटपुट
5