समस्या कथन
आकार 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];
++k;
}
for (int i = 0; i < n; ++i) {
temp[k] = arr2[i];
++k;
}
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