কম্পিউটার

C++ এ পরবর্তি ঢেউ খেলানো


ধরুন আমাদের কাছে সংখ্যার একটি ক্রম আছে যাকে বলা হয় একটি নড়াচড়া ক্রম, যদি ক্রমাগত সংখ্যার মধ্যে পার্থক্যগুলি ধনাত্মক এবং ঋণাত্মক মধ্যে কঠোরভাবে বিকল্প হয়। প্রথম পার্থক্য ইতিবাচক বা নেতিবাচক হতে পারে। দুইটির কম উপাদান সহ একটি ক্রম তুচ্ছভাবে একটি নড়বড়ে ক্রম। সুতরাং উদাহরণস্বরূপ, [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
    • যদি nums[i]> nums[i – 1] হয়, তাহলে up :=down + 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

  1. C++ এ দীর্ঘতম পাটিগণিত ক্রম

  2. C++ তে Wiggle Sort II

  3. C++ এ পারমুটেশন সিকোয়েন্স

  4. C++ এ অ্যালিকোট সিকোয়েন্স