समस्या कथन
दो समान आकार की सरणियाँ A [] और B [] दी गई हैं। कार्य समान आकार की तीसरी सरणी बनाना है। परिणाम सरणी में दोनों सरणी से अधिकतम n तत्व होने चाहिए। इसमें पहले ए [] के तत्वों को चुना जाना चाहिए, फिर बी [] के चुने हुए तत्वों को उसी क्रम में चुना जाना चाहिए जैसे वे मूल सरणी में दिखाई देते हैं। यदि सामान्य तत्व हैं, तो केवल एक तत्व res[] में मौजूद होना चाहिए और प्राथमिकता A[]
को दी जानी चाहिए।उदाहरण
यदि इनपुट सरणियाँ हैं -
arr1[] = {9, 17, 2, 25, 6}
arr2[] = {17, 4, 8, 10, 1} then final array is:
{9, 17, 25, 8, 10} कृपया ध्यान दें कि तत्व 17 सामान्य है और arr1 को प्राथमिकता दी जाती है
एल्गोरिदम
- दोनों सरणियों की प्रतियां बनाएं और प्रतियों को अवरोही क्रम में क्रमबद्ध करें
- दोनों सरणियों के अद्वितीय n अधिकतम तत्वों को चुनने के लिए हैश का उपयोग करें, arr1 को प्राथमिकता देते हुए []
- रिजल्ट एरे को खाली के रूप में इनिशियलाइज़ करें
- arr1 से गुज़रें [], arr1 [] के उन तत्वों की प्रतिलिपि बनाएँ जो हैश में मौजूद हैं। यह तत्वों के क्रम को समान रखने के लिए किया जाता है
- arr2 के लिए चरण 4 को दोहराएं []। इस बार हम केवल उन तत्वों पर विचार करते हैं जो arr1[] . में मौजूद नहीं हैं
उदाहरण
आइए अब एक उदाहरण देखें -
#include <bits/stdc++.h>
using namespace std;
void printArray(vector<int> &arr, int n) {
for (int i = 0; i < n; ++i) {
cout << arr[i] << " ";
}
cout << endl;
}
void getMaxArray(int *arr1, int *arr2, int n) {
vector<int> temp1(arr1, arr1 + n); vector<int> temp2(arr2, arr2 + n);
sort(temp1.begin(), temp1.end(), greater<int>()); sort(temp2.begin(), temp2.end(), greater<int>());
unordered_map<int, int> m;
int i = 0, j = 0;
while (m.size() < n) {
if (temp1[i] >= temp2[j]) {
m[temp1[i]]++;
++i;
} else {
m[temp2[j]]++;
++j;
}
}
vector<int> result;
for (int i = 0; i < n; ++i) {
if (m.find(arr1[i]) != m.end()) {
result.push_back(arr1[i]);
}
}
for (int i = 0; i < n; ++i) {
if (m.find(arr2[i]) != m.end() && m[arr2[i]] ==1) {
result.push_back(arr2[i]);
}
}
cout << "Final array:\n";
printArray(result, n);
}
int main() {
int arr1[] = {9, 17, 2, 25, 6};
int arr2[] = {17, 4, 8, 10, 1};
int n = sizeof(arr1) / sizeof(arr1[0]);
getMaxArray(arr1, arr2, n);
return 0;
} आउटपुट
Final array: 9 17 25 8 10