কম্পিউটার টিউটোরিয়াল

সি++-এ লংগেস্ট টার্বুলেন্ট সাবঅ্যারে (Longest Turbulent Subarray)


A[i], A[i+1], ..., A[j] সাবঅ্যারেকে turbulent বলা হয় যদি এটি নিচের শর্তগুলো পূরণ করে -

  • i ≤ k < j এবং A[k] > A[k+1] যখন k বিজোড়, এবং A[k] < A[k+1] যখন k জোড়;

  • অন্যথায়, i ≤ k < j এবং A[k] > A[k+1] যখন k জোড়, এবং A[k] < A[k+1] যখন k বিজোড়।

অর্থাৎ সাবঅ্যারেটি turbulent হয় যদি প্রতিটি সন্নিহিত জোড়া এলিমেন্টের মধ্যে তুলনা চিহ্ন ফ্লিপ করে। A-র সর্বাধিক আকারের turbulent সাবঅ্যারের দৈর্ঘ্য খুঁজে বের করতে হবে। ইনপুট [9,4,2,10,7,8,8,1,9] হলে আউটপুট ৫। কারণ A[1] > A[2] < A[3] > A[4] < A[5]।

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -

  • n := A.size()

  • prevBig := 1, prevSmall := 1, currBig := 1, currSmall := 1, ret := 1

  • i = 1 থেকে n-1 পর্যন্ত লুপ চালান

    • যদি A[i] > A[i-1] হয়, currBig := 1 + prevSmall

    • যদি A[i] < A[i-1] হয়, currSmall := 1 + prevBig

    • ret := max(ret, currBig, currSmall)

    • prevSmall := currSmall, prevBig := currBig, currSmall := 1, currBig := 1

  • return ret

নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -

উদাহরণ

#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. সি++-এ লংগেস্ট স্ট্রিং চেইন (Longest String Chain)

  2. সি++-এ লংগেস্ট আরিথমেটিক সিকোয়েন্স (Longest Arithmetic Sequence)

  3. C++-এ সাবঅ্যারে XOR কুয়েরি

  4. C++-এ সাবঅ্যারে মিনিমামগুলোর যোগফল