সাজানো পূর্ণসংখ্যার প্রদত্ত অ্যারেতে, কাজটি হল প্রতিটি অ্যারের উপাদানের স্কোয়ারগুলি প্রিন্ট করা এবং সাজানো ক্রমে অ্যারেটি প্রিন্ট করা। উদাহরণস্বরূপ,
ইনপুট-1 −
arr[ ] = { -3,-1,0,1,4,6 };
আউটপুট −
{0,1,1,9,16, 36}
ব্যাখ্যা − প্রদত্ত অ্যারের [-3, -1,0,1,4,6] প্রতিটি উপাদানের বর্গ হল [0,1,1,9,16,36]৷
ইনপুট-2 −
arr[ ]= { 0,1,2,8,9 }
আউটপুট −
{0,1,4,64,81}
ব্যাখ্যা − প্রদত্ত অ্যারের প্রতিটি উপাদানের বর্গ [ 0,1,2,8,9 ] হল [ 0,1,4,64,81]৷
এই সমস্যা সমাধানের পদ্ধতি
এই বিশেষ সমস্যা সমাধানের জন্য, আমরা দুই-পয়েন্টার পদ্ধতি ব্যবহার করতে পারি। টু-পয়েন্টারে আমরা বাম এবং ডানে দুটি পয়েন্টার ব্যবহার করি। বাম পয়েন্টারটি অ্যারের প্রথম উপাদানের সাথে শুরু হয় এবং ডান পয়েন্টারটি অ্যারের শেষ উপাদানটির দিকে নির্দেশ করে৷
অ্যারের উপাদানগুলির উপর পুনরাবৃত্তি করার সময় আমরা মানের বর্গ খুঁজে বের করব এবং ডান পূর্ণসংখ্যার বর্গটি বাম পূর্ণসংখ্যার চেয়ে বড় বা কম কিনা তা পরীক্ষা করব৷
-
ক্রমবর্ধমান ক্রমে পূর্ণসংখ্যার একটি অ্যারে ইনপুট নিন।
-
একটি পূর্ণসংখ্যা ফাংশন squareAndSort(int *arr, int n) পূর্ণসংখ্যার একটি অ্যারে হিসাবে ইনপুট নেয় এবং একটি সাজানো পদ্ধতিতে অ্যারের প্রতিটি উপাদানের বর্গ ফেরত দেয়।
-
অ্যারের বাম উপাদান এবং ডানদিকের উপাদান দিয়ে বাম এবং ডানে দুটি পয়েন্টার শুরু করুন৷
-
উপাদানটির বর্গক্ষেত্রটি প্রিন্ট করুন এবং সঠিক উপাদানটির বর্গক্ষেত্রের সাথে তুলনা করুন।
-
সেই অনুযায়ী বাম এবং ডান পয়েন্টার বৃদ্ধি এবং হ্রাস করুন।
উদাহরণ
#include <bits/stdc++.h> using namespace std; vector<int> squareAndSort(vector<int>&arr){ int left= 0; int right= arr.size()-1; vector<int>vec; while(left<=right){ while(left <= right) { int v1 = arr[left]*arr[left]; int v2 = arr[right]*arr[right]; if(v1 <= v2) { vec.push_back(v2); right--; } else { vec.push_back(v1); left++; } } reverse(vec.begin(), vec.end()); } return vec; } int main(){ vector<int>arr= {-3,-1,0,1,4,6}; vector<int>ans= squareAndSort(arr); for(auto x:ans){ cout<<x<<" "; } return 0; }
আউটপুট
উপরের কোডটি চালানোর ফলে আউটপুট তৈরি হবে,
0 1 1 9 16 36
অ্যারের প্রতিটি উপাদানের বর্গ হল, 9,1,0,1,16,36। এই উপাদানগুলি সাজানোর পরে, আউটপুট হবে 0 1 1 9 16 36৷