ধরা যাক একটি প্রাথমিক অ্যারে 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]