समस्या कथन
दो समान आकार की सरणियाँ 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