সমস্যা বিবরণ
আকার n-এর দুটি অ্যারে দেওয়া আছে, দ্বিতীয় অ্যারের উপাদান ব্যবহার করে প্রথম অ্যারেকে সর্বাধিক করুন যেন নতুন অ্যারেটি দুটি অ্যারের nটি সর্বোচ্চ কিন্তু ইউনিক উপাদান ধারণ করে এবং দ্বিতীয় অ্যারেকে অগ্রাধিকার দেয়া হয় অর্থাৎ দ্বিতীয় অ্যারের সব উপাদান প্রথম অ্যারের আগে আসবে। ইনপুটে উপাদানগুলোর যে ক্রমে উপস্থিতি ছিল সেটি আউটপুটে রক্ষা করতে হবে।
যদি arr1[] = {12, 15, 10} এবং arr2[] = {16, 17, 5} হয় তবে {16, 17, 15} হল দুটি অ্যারে থেকে ক্রম রক্ষা করে সর্বোচ্চ উপাদান।
অ্যালগরিদম
1. 2*n আকারের একটি টেম্পরারি অ্যারে তৈরি করুন। 2. arr1 এবং arr2-এর উপাদানগুলো টেম্পরারি অ্যারেতে সংরক্ষণ করুন এবং ডিসেন্ডিং ক্রমে সর্ট করুন। 3. ইনপুট অ্যারেগুলোর অনুযায়ী উপাদানগুলোর ক্রম রাখতে হ্যাশ টেবিল ব্যবহার করুন। 4. টেম্পরারি অ্যারেতে প্রথম nটি সর্বোচ্চ ইউনিক উপাদান হ্যাশ টেবিলে সংরক্ষণ করুন। 5. দ্বিতীয় অ্যারে ট্রভার্স করুন এবং হ্যাশ টেবিলে থাকা উপাদানগুলো টেম্পরারি অ্যারেতে সংরক্ষণ করুন। 6. একইভাবে প্রথম অ্যারে ট্রভার্স করুন এবং হ্যাশ টেবিলে থাকা উপাদানগুলো সংরক্ষণ করুন। 7. এইভাবে দুটি অ্যারেতে থেকে nটি ইউনিক এবং সর্বোচ্চ উপাদান টেম্পরারি অ্যারেতে পাওয়া যায়।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void printArray(int* arr, int n) {
for (int i = 0; i < n; ++i) cout << arr[i] << " ";
cout << endl;
}
bool compare(int a, int b) { return a > b; }
void getMaxElements(int* arr1, int* arr2, int n) {
int temp[2 * n];
int k = 0;
for (int i = 0; i < n; ++i) temp[k++] = arr1[i];
for (int i = 0; i < n; ++i) temp[k++] = arr2[i];
sort(temp, temp + 2 * n, compare);
unordered_set<int> hash;
int i = 0;
while (hash.size() != n) {
if (hash.find(temp[i]) == hash.end()) hash.insert(temp[i]);
++i;
}
k = 0;
for (int i = 0; i < n; ++i) {
if (hash.find(arr2[i]) != hash.end()) {
temp[k++] = arr2[i];
hash.erase(arr2[i]);
}
}
for (int i = 0; i < n; ++i) {
if (hash.find(arr1[i]) != hash.end()) {
temp[k++] = arr1[i];
hash.erase(arr1[i]);
}
}
for (int i = 0; i < n; ++i) arr1[i] = temp[i];
}
int main() {
int arr1[] = {12, 15, 10};
int arr2[] = {16, 17, 5};
int n = sizeof(arr1) / sizeof(arr1[0]);
cout << "First array:\n"; printArray(arr1, n);
cout << "Second array:\n"; printArray(arr2, n);
getMaxElements(arr1, arr2, n);
cout << "Maximum array:\n"; printArray(arr1, n);
return 0;
}
আউটপুট
First array: 12 15 10 Second array: 16 17 5 Maximum array: 16 17 15