Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में क्रम को समान रखते हुए दो दिए गए सरणियों से अधिकतम सरणी

समस्या कथन

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

  1. C++ में दिए गए ऑब्जेक्ट्स की सरणी से अधिकतम ऊंचाई पिरामिड खोजें

    मान लीजिए कि हमारे पास n वस्तुओं की एक सरणी है। प्रत्येक वस्तु की चौड़ाई W [i] होती है। हमें उन्हें पिरामिड के रूप में व्यवस्थित करना होगा जैसे - ith की कुल चौड़ाई (i + 1)वें से कम है ith में वस्तुओं की कुल संख्या (i + 1)वें से कम है उदाहरण के लिए, यदि वज़न [40, 100, 20, 30] जैसा है, तो आउट

  1. C++ में दो सरणियों से अद्वितीय जोड़े को अधिकतम करना

    समस्या कथन समान आकार N के दो सरणियों को देखते हुए, उनके तत्वों का उपयोग करके अधिकतम संख्या में जोड़े बनाते हैं, एक पहली सरणी से और दूसरी दूसरी सरणी से, जैसे कि प्रत्येक सरणी से एक तत्व का अधिकतम-एक बार उपयोग किया जाता है और चयनित के बीच पूर्ण अंतर युग्म बनाने के लिए उपयोग किए जाने वाले तत्व दिए गए

  1. सी ++ में क्रमबद्ध क्रम में दो क्रमबद्ध सरणी विलय करना।

    समस्या कथन एक ऐसा फ़ंक्शन लिखें जो दो अवर्गीकृत सरणियों को लेता है और उन्हें क्रमबद्ध क्रम में एक नए सरणी में मिला देता है। arr1[] = {10, 5, 7, 2} arr2[] = {4, 17, 9, 3} result[] = {2, 3, 4, 5, 7, 9, 10, 17} एल्गोरिदम 1. Merge two unsorted array into new array 2. Sort newly create array उदाहरण #inc