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

C++ में दूसरे ऐरे का उपयोग करके ऐरे तत्वों को अधिकतम करना


समस्या कथन

आकार 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
  1. - C++ में STL में pair का उपयोग करके दूसरी सरणी के अनुसार सरणी को सॉर्ट करना

    मान लीजिए हमारे पास दो अलग-अलग सरणियां हैं। हमें C++ STL pair क्लास का उपयोग करके दूसरी सरणी के आधार पर एक सरणी को सॉर्ट करना है। मान लीजिए दो सरणियां A1 = [2, 1, 5, 4, 9, 3, 6, 7, 10, 8], और दूसरी सरणी A2 = [A, B, C, D, E, F, G, H, I, J] जैसी हैं, आउटपुट ऐसा होगा: A1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1

  1. - C++ में हीप सॉर्ट एल्गोरिदम का उपयोग करके 10 तत्वों की सरणी को सॉर्ट करने का प्रोग्राम

    हीप सॉर्ट बाइनरी हीप डेटा संरचना पर आधारित है। बाइनरी हीप में, मैक्स हीप के मामले में पैरेंट नोड के चाइल्ड नोड्स उससे छोटे या बराबर होते हैं, और मिन हीप के मामले में चाइल्ड नोड्स पैरेंट से बड़े या बराबर होते हैं। हीप सॉर्ट के सभी चरणों को समझाने वाला एक उदाहरण निम्नलिखित है। सॉर्टिंग से पहले 10 तत्व

  1. - C++ में पॉइंटर का उपयोग करके सरणी के एलिमेंट्स एक्सेस करने का प्रोग्राम

    पॉइंटर्स वेरिएबल्स के मेमोरी स्थान या पते को संग्रहीत करते हैं। दूसरे शब्दों में, पॉइंटर्स एक मेमोरी स्थान को संदर्भित करते हैं और उस मेमोरी स्थान पर संग्रहीत मान को प्राप्त करना पॉइंटर को डीरेफरेंस करना कहलाता है। एक प्रोग्राम जो सरणी के एकल एलिमेंट को एक्सेस करने के लिए पॉइंटर्स का उपयोग करता है,