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

C++-এ অ্যারে ট্রান্সফরমেশন


ধরা যাক একটি প্রাথমিক অ্যারে arr আছে, প্রতিদিন আমরা আগের দিনের অ্যারে ব্যবহার করে একটি নতুন অ্যারে তৈরি করি। i-তম দিনে, আমরা দিন i-1-এর অ্যারেতে নিচের অপারেশনগুলো wykon করি দিন i-এর অ্যারে তৈরির জন্য। শর্তগুলো হলো:

  • যদি কোনো এলিমেন্ট তার বাম এবং ডান সন্নিহিত মানদোণের চেয়ে ছোট হয়, তবে এই এলিমেন্টটি ইনক্রিমেন্ট করা হবে।

  • যদি কোনো এলিমেন্ট তার বাম এবং ডান সন্নিহিত মানদোণের চেয়ে বড় হয়, তবে এই এলিমেন্টটি ডিক্রিমেন্ট করা হবে।

  • প্রথম এবং শেষ এলিমেন্টগুলো অপরিবর্তিত থাকবে।

কিছু দিন পর অ্যারে আর পরিবর্তন হয় না। সেই ফাইনাল অ্যারেটি খুঁজে বের করুন। তাই যদি প্রাথমিক অ্যারে হয় [6,2,3,4], তবে আউটপুট হবে [6,3,3,4]। প্রথম দিনে অ্যারে [6,2,3,4] থেকে [6,3,3,4]-এ পরিবর্তিত হবে, তারপর আর কোনো অপারেশন হবে না।

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

  • যদি অ্যারের আকার 2 বা তার কম হয়, তবে অ্যারেটি রিটার্ন করুন
  • flag := true সেট করুন
  • যখন flag true থাকে
    • flag := false সেট করুন
    • temp নামে একটি খালি অ্যারে তৈরি করুন এবং arr[0] ইনসার্ট করুন
    • i = 1 থেকে অ্যারের আকার - 1 পর্যন্ত
      • যদি arr[i] < arr[i-1] এবং arr[i] < arr[i+1] হয়, তবে arr[i] + 1 temp-এ ইনসার্ট করুন এবং flag = true সেট করুন
      • অন্যথায় যদি arr[i] > arr[i-1] এবং arr[i] > arr[i+1] হয়, তবে arr[i] - 1 temp-এ ইনসার্ট করুন এবং flag := true সেট করুন
      • অন্যথায় arr[i] temp-এ ইনসার্ট করুন
    • arr-এর শেষ এলিমেন্ট temp-এ ইনসার্ট করুন
    • arr := temp
  • arr রিটার্ন করুন

উদাহরণ (C++):

নিচের ইমপ্লিমেন্টেশনটি দেখে আরও ভালো বুঝতে পারবেন:

#include <bits/stdc++.h> using namespace std; #define push push_back void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class Solution { public:    vector<int> transformArray(vector<int>& arr) {       if(arr.size()<=2)return arr;       bool flag = true;       while(flag){          flag = false;          vector <int> temp;          temp.push_back(arr[0]);          for(int i = 1; i < arr.size()-1; i++){             if(arr[i]< arr[i-1] && arr[i]<arr[i+1]){                temp.push(arr[i]+1);                flag = true;             }             else if(arr[i]> arr[i-1] && arr[i]>arr[i+1]){                flag = true;                temp.push(arr[i]-1);             }             else temp.push(arr[i]);          }          temp.push_back(arr[arr.size()-1]);          arr = temp;       }       return arr;    } }; main(){    Solution ob;    vector<int> v = {1,6,3,4,3,5};    print_vector(ob.transformArray(v)); }

ইনপুট

[1,6,3,4,3,5]

আউটপুট

[1,4,4,4,4,5]

  1. C++-এ মেজোরিটি এলিমেন্ট (Majority Element)

  2. C++-এ O(1) স্পেসে গুণফল অ্যারে পাজল সমাধান

  3. C++-এ স্ট্রিং এর অ্যারে (C++ Array of Strings)

  4. C++-এ সর্টিং (Sorting)