পূর্ণসংখ্যার একটি অ্যারে দেওয়া, কাজটি হল অ্যারেটি সাজানো (ক্রমবর্ধমান) এবং কিছু সংখ্যক অবস্থানের পরে ঘোরানো হয়েছে কিনা তা পরীক্ষা করা।
উদাহরণস্বরূপ
ইনপুট-1:
N = [7, 8, 9, 4, 5, 6]
আউটপুট:
True
ব্যাখ্যা: যেহেতু প্রদত্ত অ্যারেটি ক্রমবর্ধমান ক্রমে রয়েছে এবং 3য় অবস্থানের পরের উপাদানগুলি ঘোরানো হয়েছে, তাই আমরা এই ক্ষেত্রে True ফেরত দেব৷
ইনপুট-2:
N = [1, 5, 7, 6, 2, 3]
আউটপুট:
False
ব্যাখ্যা: যেহেতু প্রদত্ত অ্যারেটি ক্রমবর্ধমান ক্রমে নয় বা নির্দিষ্ট অবস্থানের সাথে ঘোরানো হয় না, আউটপুটটি মিথ্যা৷
এই সমস্যা সমাধানের পদ্ধতি
ক্রমবর্ধমান ক্রমে বা সাজানো ছাড়া আমাদের উপাদান সহ একটি অ্যারে আছে। যদি অ্যারে সাজাতে হয় এবং ঘোরাতে হয়, তাহলে অন্তত একটি উপাদান থাকবে এমন যে N[i]> N[i+1]।
এইভাবে, প্রতিটি N[i]-এর জন্য, শর্ত পূরণ করে এমন কোনো উপাদান থাকলে আমরা গণনা করব এবং সেই অনুযায়ী সত্য বা মিথ্যা ফেরত দেব।
- একটি অ্যারে উপাদানের ইনপুট নিন।
- একটি বুলিয়ান ফাংশন checkSortedandRotated(int *arr, int n) ইনপুট হিসাবে একটি অ্যারে এবং এর আকার নেয় এবং অ্যারেটি সাজানো এবং ঘোরানো হলে সত্য ফেরত দেয় অন্যথায় মিথ্যা।
- পুরো অ্যারেতে পুনরাবৃত্তি করুন এবং উপাদানের সংখ্যা গণনা করুন যা (arr[i]> arr[i+1]%n)। যদি গণনা '1' হয়, তাহলে True দিন, অন্যথায় False দিন।
- আউটপুট ফেরত দিন।
উদাহরণ
#include <bits/stdc++.h> using namespace std; bool checkSortedandRotated(int * arr, int n) { int count = 0; for (int i = 0; i < n; i++) { if (arr[i] > arr[(i + 1) % n]) count++; } return (count <= 1); } int main() { int arr[] = {5,6,7,1,2,3,4}; int n = sizeof(arr) / sizeof(int); if (checkSortedandRotated(arr, n)) { cout << "True" << endl; } else { cout << "False" << endl; } return 0; }
উপরের কোডটি চালানোর ফলে আউটপুট তৈরি হবে,
আউটপুট
True
যেহেতু প্রদত্ত অ্যারে [5, 6, 7, 1, 2, 3, 4] 3য় অবস্থান থেকে সাজানো এবং ঘোরানো হয়েছে, তাই আমরা এই ক্ষেত্রে 'True' হিসাবে আউটপুট পাই।