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

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


समस्या कथन

दो समान आकार के ऐरे A[] और B[] दिए गए हैं। कार्य समान आकार का तीसरा ऐरे बनाना है। परिणाम ऐरे में दोनों ऐरे से अधिकतम n तत्व होने चाहिए। इसमें A[] के चुने हुए तत्व पहले होने चाहिए, फिर B[] के चुने हुए तत्व उसी क्रम में जैसे वे मूल ऐरे में दिखाई देते हैं। यदि सामान्य तत्व हैं, तो res[] में केवल एक तत्व मौजूद होना चाहिए और प्राथमिकता A[] को दी जानी चाहिए।

उदाहरण

यदि इनपुट ऐरे हैं:

arr1[] = {9, 17, 2, 25, 6}
arr2[] = {17, 4, 8, 10, 1}
तब अंतिम ऐरे है: {9, 17, 25, 8, 10}

कृपया ध्यान दें कि तत्व 17 सामान्य है और प्राथमिकता arr1 को दी गई है।

एल्गोरिदम

  • दोनों ऐरे की कॉपी बनाएं और कॉपी को अवरोही क्रम में सॉर्ट करें।
  • हैश का उपयोग करके दोनों ऐरे के अद्वितीय n अधिकतम तत्व चुनें, arr1[] को प्राथमिकता दें।
  • परिणाम ऐरे को खाली प्रारंभ करें।
  • arr1[] को पार करें, arr1[] के उन तत्वों को कॉपी करें जो हैश में मौजूद हैं। यह तत्वों के क्रम को समान रखने के लिए किया जाता है।
  • चरण 4 को arr2[] के लिए दोहराएं। इस बार केवल उन तत्वों पर विचार करें जो 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] है। हमें उन्हें पिरामिड के तरीके में व्यवस्थित करना है जैसे - i-वें स्तर की कुल चौड़ाई (i+1)-वें स्तर से कम हो i-वें स्तर में वस्तुओं की कुल संख्या (i+1)-वें स्तर से कम हो उदाहरण के लिए, यदि चौड़ाई [40, 100, 20, 30] है, तो

  1. - C++ में दो ऐरे से अद्वितीय पेयर्स को अधिकतम करना

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

  1. - C++ में दो अनसॉर्टेड सरणियों को सॉर्ट क्रम में मर्ज करना

    समस्या कथन एक फ़ंक्शन लिखें जो दो अनसॉर्टेड सरणियों को लेता है और उन्हें एक नई सरणी में सॉर्ट क्रम में मर्ज करता है। arr1[] = {10, 5, 7, 2} arr2[] = {4, 17, 9, 3} result[] = {2, 3, 4, 5, 7, 9, 10, 17} एल्गोरिदम 1. दो अनसॉर्टेड सरणियों को नई सरणी में मर्ज करें 2. नव निर्मित सरणी को सॉर्ट करें C++ उ