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

C++ में सबसे लंबा अशांत सबरे

एक उपसरणी पर विचार करें A[i], A[i+1], ..., A[j] of A को अशांत कहा जाता है जब वह इन शर्तों को पूरा करता है -

  • i <=k A[k+1] के लिए जब k विषम हो, और A[k]

  • अन्यथा, i <=k A[k+1] के लिए जब k सम हो, और A[k]

तो उपसरणी अशांत है यदि तुलना चिह्न उपसरणी में तत्वों की प्रत्येक आसन्न जोड़ी के बीच फ़्लिप करता है। अब ए के अधिकतम आकार के अशांत उप-सरणी की लंबाई पाएं। तो यदि इनपुट [9,4,2,10,7,8,8,1,9] जैसा है, तो आउटपुट 5 है। ऐसा इसलिए है क्योंकि ए [1]> ए[2] <ए[3]> ए[4] <ए[5]

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

  • n :=सरणी A का आकार

  • पिछलाबिग:=1, पिछलाछोटा:=1, कर्बिग:=1, कर्टस्मॉल:=1 और सेवानिवृत्त:=1

  • मैं के लिए 1 से n - 1 की सीमा में

    • अगर A[i]> A[i – 1], तो currBig :=1 + prevSmall

    • अगर A[i]

    • ret :=अधिकतम रिट, currBig और currSmall

    • पिछलाछोटा :=currSmall, prevBig :=currBig, currSmall :=1, currBig :=1

  • वापसी रिट

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int maxTurbulenceSize(vector<int>& A) {
      int n = A.size();
      int prevBig = 1;
      int prevSmall = 1;
      int currBig = 1;
      int currSmall = 1;
      int ret = 1;
      for(int i = 1; i < n; i++){
         if(A[i] > A[i - 1]){
            currBig = 1 + prevSmall;
         }
         if(A[i] < A[i - 1]){
            currSmall = 1 + prevBig;
         }
         ret = max({ret, currBig, currSmall});
         prevSmall = currSmall;
         prevBig = currBig;
         currSmall = 1;
         currBig = 1;
      }
      return ret;
   }  
};
main(){
   vector<int> v1 = {9,4,2,10,7,8,8,1,9};
   Solution ob;
   cout << (ob.maxTurbulenceSize(v1));
}

इनपुट

[9,4,2,10,7,8,8,1,9]

आउटपुट

5

  1. C++ में सबसे लंबा अंकगणित अनुक्रम

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी ए है, हमें ए में सबसे लंबे अंकगणितीय अनुक्रम की लंबाई वापस करनी होगी। जैसा कि आप जानते हैं कि ए का एक क्रम एक सूची ए [i_1], ए [i_2], ..., ए [ है। i_k] 0 के साथ <=i_1

  1. सी ++ में एक सबरे की एक्सओआर क्वेरीज़

    मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की सरणी गिरफ्तारी है और सरणी क्वेरीज जहां क्वेरीज़ [i] =[Li, Ri], प्रत्येक क्वेरी के लिए मैं Li से Ri तक के तत्वों के XOR की गणना करता हूं (अर्थात, arr[Li] XOR arr[Li+1] xor ... xor arr[Ri] )। हमें दिए गए प्रश्नों के परिणाम वाले सरणी को ढूंढना है। तो अगर इ

  1. सी ++ में सबरे न्यूनतम का योग

    मान लीजिए कि हमारे पास पूर्णांक A की एक सरणी है। हमें min(B) का योग ज्ञात करना है, जहां B, A के प्रत्येक (सन्निहित) उप-सरणी के ऊपर है। चूंकि उत्तर बहुत हो सकता है बड़ा है, फिर उत्तर को मॉड्यूलो 10 ^ 9 + 7 में लौटाएँ। इसलिए यदि इनपुट [3,1,2,4] जैसा है, तो आउटपुट 17 होगा, क्योंकि उप-सरणी हैं [3], [1],