Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में सरणी में सबसे लंबा पर्वत


किसी भी (सन्निकट) उपसरणी B (A की) को पर्वत कहा जाता है यदि निम्नलिखित गुण लागू होते हैं -

  • B का आकार >= 3
  • कुछ 0 < i < B.length - 1 मौजूद है जैसे कि B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]

मान लीजिए हमारे पास पूर्णांकों की एक सरणी A है; हमें सबसे लंबे पर्वत की लंबाई ढूंढनी है। यदि कोई पर्वत नहीं है तो हमें 0 लौटाना है। तो यदि इनपुट [2,1,4,7,3,2,5] जैसा है, तो परिणाम 5 होगा। तो सबसे बड़ा पर्वत [1,4,7,3,2] होगा, जिसकी लंबाई 5 है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • ret := 0, n := सरणी a का आकार
  • i := 0 से n - 1 तक, i को j + 1 से बढ़ाएं
    • j := i
    • down := false, up := false
    • जब तक j + 1 < n और a[j + 1] > a[j]
      • up := true और j को 1 से बढ़ाएं
    • जब तक up true है और j + 1 < n और a[j + 1] > a[j]
      • down := true और j को 1 से बढ़ाएं
    • यदि up और down दोनों true हैं, तो ret := j - i + 1 और ret का अधिकतम सेट करें, j को 1 से घटाएं
  • ret लौटाएं।

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#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

  1. - C++ में लॉन्गेस्ट टर्ब्युलेंट सबएरे (Longest Turbulent Subarray)

    एक उपसरणी A[i], A[i+1], ..., A[j] को टर्ब्युलेंट (turbulent) कहा जाता है जब यह इन शर्तों को पूरा करती है: i ≤ k A[k+1], और जब k सम हो तो A[k] < A[k+1]; अन्यथा, i ≤ k A[k+1], और जब k विषम हो तो A[k] < A[k+1]। इसलिए उपसरणी टर्ब्युलेंट होती है यदि उपसरणी में प्रत्येक आसन्न जोड़ी के बीच तुलना चिन्ह

  1. - C++ में स्ट्रिंग्स की सरणी

    इस खंड में हम देखेंगे कि C++ में स्ट्रिंग्स की सरणी को कैसे परिभाषित किया जाए। जैसा कि हम जानते हैं कि C में कोई स्ट्रिंग्स नहीं थीं। हमें कैरेक्टर सरणी का उपयोग करके स्ट्रिंग्स बनानी पड़ती थीं। इसलिए कुछ स्ट्रिंग्स की सरणी बनाने के लिए, हमें कैरेक्टर्स की 2-आयामी सरणी बनानी पड़ती थी। प्रत्येक पंक्

  1. - C++ में सॉर्टिंग

    इस सेक्शन में हम देखेंगे कि C++ में सॉर्टिंग एल्गोरिदम कैसे निष्पादित करें। एक सॉर्टेड ऐरे एक ऐरे है जिसमें प्रत्येक एलिमेंट किसी क्रम में सॉर्टेड होते हैं जैसे न्यूमेरिकल, अल्फाबेटिकल आदि। एक न्यूमेरिकल ऐरे को सॉर्ट करने के लिए कई एल्गोरिदम हैं जैसे बबल सॉर्ट, इन्सर्शन सॉर्ट, सिलेक्शन सॉर्ट, मर्ज स