मान लीजिए कि हमारे पास संख्याओं का एक क्रम है जिसे विग्गल अनुक्रम कहा जाता है यदि क्रमिक संख्याओं के बीच अंतर सकारात्मक और नकारात्मक के बीच सख्ती से वैकल्पिक होता है। पहला अंतर या तो सकारात्मक या नकारात्मक हो सकता है। दो से कम तत्वों वाला एक क्रम तुच्छ रूप से एक विग्गल अनुक्रम है। तो उदाहरण के लिए, [1,7,4,9,2,5] एक विग्गल अनुक्रम है क्योंकि यदि आप देखें, तो अंतर (6,-3,5,-7,3) बारी-बारी से सकारात्मक और नकारात्मक हैं। लेकिन, [1,4,7,2,5] और [1,7,4,5,5] विग्गल सीक्वेंस नहीं हैं, पहला इसलिए क्योंकि इसके पहले दो अंतर सकारात्मक हैं और दूसरा क्योंकि इसका अंतिम अंतर शून्य है ।
तो हमारे पास पूर्णांकों का एक क्रम है, हमें सबसे लंबे बाद के अनुक्रम की लंबाई ज्ञात करनी होगी जो कि एक विग्गल अनुक्रम है। मूल अनुक्रम से कुछ तत्वों (अंततः, शून्य भी) को हटाकर, शेष तत्वों को उनके मूल क्रम में छोड़कर एक अनुवर्ती प्राप्त किया जाता है। तो अगर इनपुट [1,7,4,9,2,5] जैसा है, तो आउटपुट 6 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n :=अंकों का आकार
-
अगर n 0 है, तो वापस 0
-
सेट अप:=1 और नीचे:=1
-
मैं के लिए 1 से n - 1 की सीमा में
-
अगर अंक [i]> अंक [i – 1], तो ऊपर:=नीचे + 1
-
अन्यथा जब nums[i]
-
-
अधिकतम ऊपर और नीचे लौटें
उदाहरण (C++)
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: int wiggleMaxLength(vector<int>& nums) { int n = nums.size(); if(!n) return 0; int up = 1; int down = 1; for(int i = 1; i < n; i++){ if(nums[i] > nums[i - 1]){ up = down + 1; } else if(nums[i] < nums[i - 1]){ down = up + 1; } } return max(up, down); } }; main(){ Solution ob; vector<int> v = {1,7,4,9,2,5}; cout << (ob.wiggleMaxLength(v)); }
इनपुट
[1,7,4,9,2,5]
आउटपुट
6