ধরুন একটি প্রাথমিক অ্যারে অ্যারে আছে, বিবেচনা করুন প্রতিদিন আমরা আগের দিনের অ্যারে ব্যবহার করে একটি নতুন অ্যারে তৈরি করি। i-ম দিনে, আমরা দিনের অ্যারে তৈরি করতে i-1 দিনের অ্যারেতে নিম্নলিখিত ক্রিয়াকলাপগুলি সম্পাদন করব। শর্তগুলি নিম্নরূপ -
-
যদি একটি উপাদান তার বাম এবং ডান পাশের উভয় মানের থেকে ছোট হয়, তাহলে এই উপাদানটি বৃদ্ধি পাবে।
-
যদি একটি উপাদান তার বাম এবং ডান সন্নিহিত উভয় মানের থেকে বড় হয়, তাহলে এই উপাদানটি হ্রাস পাবে৷
-
প্রথম এবং শেষ উপাদান একই থাকবে।
কিছু দিন পরে, অ্যারে আর পরিবর্তন হয় না। যে চূড়ান্ত অ্যারে খুঁজে. তাই যদি প্রাথমিক অ্যারে হয় [6,2,3,4] তাহলে আউটপুট হবে [6,3,3,4]। প্রথম দিনে, অ্যারে [6,2,3,4] থেকে [6,3,3,4] তে পরিবর্তিত হবে, তারপর আর কোনো অপারেশন করা হবে না৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- যদি অ্যারের আকার 2 বা 2 এর কম হয়, তাহলে অ্যারে ফেরত দিন
- পতাকা সেট করুন :=সত্য
- যদিও পতাকা সত্য −
- পতাকা সেট করুন :=মিথ্যা
- টেম্প নামে একটি খালি অ্যারে তৈরি করুন এবং টেম্পে arr[0] ঢোকান
- এর জন্য আমি রেঞ্জ 1 থেকে অ্যারের আকার - 1
- যদি arr[i]
- অন্যথায় যখন arr[i]> arr[i - 1] এবং arr[i]> arr[i + 1], তারপর temp এ arr[i] – 1 ঢোকান এবং পতাকা সেট করুন :=true
- অন্যথায় টেম্পে arr[i] ঢোকান
- যদি arr[i]
- টেম্পে arr-এর শেষ উপাদান ঢোকান
- arr :=temp
- রিটার্ন এআরআর
উদাহরণ(C++)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
#includeNamespace std ব্যবহার করে;#define push_backvoid print_vector(vector v){ cout <<"["; for(int i =0; i ট্রান্সফর্ম অ্যারে(ভেক্টর এন্ড অ্যার) { if(arr.size()<=2)রিটার্ন অ্যাআর; bool flag =সত্য; while(পতাকা){ পতাকা =মিথ্যা; ভেক্টর temp; temp.push_back(arr[0]); for(int i =1; i arr[i-1] &&arr[i]>arr[i+1]){ flag =true; temp.push(arr[i]-1); } অন্য temp.push(arr[i]); } temp.push_back(arr[arr.size()-1]); arr =temp; } রিটার্ন arr; }};প্রধান(){সমাধান ob; ভেক্টর v ={1,6,3,4,3,5}; print_vector(ob.transformArray(v));}