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

C++ में K लगातार सब-ऐरे के न्यूनतम में अधिकतम को अधिकतम करना


दिया गया कार्य एक ऐरे arr[] को K लगातार सब-ऐरे में विभाजित करना और K लगातार सब-ऐरे के न्यूनतम में अधिकतम के अधिकतम संभव मान को ढूंढना है।

इनपुट

arr[] = {2, 8, 4, 3, 9, 1, 5}, K=3

आउटपुट

9

व्याख्या - जो 3 लगातार सब-ऐरे बनाए जा सकते हैं: {2, 8, 4, 3}, {9}, और {1, 5}

इन सभी ऐरे से न्यूनतम मान हैं: (2, 9, 1)

इन तीनों में से अधिकतम मान 9 है।

इनपुट

arr[] = {8, 4, 1, 9, 11}, K=1

आउटपुट

11

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण

  • यदि हम कार्य को देखें, तो इसे 3 मामलों में विभाजित किया जा सकता है - जब K=1, K=2 और K>=3।
  • केस 1 - K=1: जब K=1 होता है तो सब-ऐरे ऐरे के बराबर होता है और इसलिए ऐरे में न्यूनतम मान आउटपुट होगा।
  • केस 2 - K=2: यह एक कठिन मामला है। इस मामले में हमें दो ऐरे बनाने होंगे जिनमें प्रीफिक्स और सफिक्स न्यूनतम होंगे क्योंकि ऐरे को केवल 2 भागों में विभाजित किया जा सकता है। फिर ऐरे के प्रत्येक एलिमेंट के लिए हमें यह करना होगा - MaxValue = max(MaxValue, max(प्रीफिक्स न्यूनतम मान i पर, सफिक्स अधिकतम मान i+1 पर))
  • केस 3 - K>=3: जब K>=3 होता है तो हम हमेशा ऐरे के अधिकतम एलिमेंट को एक अलग सब-ऐरे में रख सकते हैं, इसलिए उत्तर ऐरे का अधिकतम एलिमेंट होगा।

उदाहरण

#include <bits/stdc++.h>
using namespace std;

/* K सब-ऐरे के न्यूनतम के अधिकतम के अधिकतम संभव मान को खोजने का फंक्शन */
int Max(const int* arr, int size, int K) {
    int MaxVal = INT_MIN;
    int MinVal = INT_MAX;
    
    // अधिकतम और न्यूनतम प्राप्त करें
    for (int i = 0; i < size; i++) {
        MinVal = min(MinVal, arr[i]);
        MaxVal = max(MaxVal, arr[i]);
    }
    
    // जब K=1, न्यूनतम मान रिटर्न करें
    if (K == 1) {
        return MinVal;
    }
    // जब K>=3, अधिकतम मान रिटर्न करें
    else if (K >= 3) {
        return MaxVal;
    }
    /* जब K=2 तब प्रीफिक्स और सफिक्स न्यूनतम बनाएं */
    else {
        // प्रीफिक्स और सफिक्स न्यूनतम संग्रहीत करने के लिए ऐरे
        vector<int> Left(size), Right(size);
        Left[0] = arr[0];
        Right[size - 1] = arr[size - 1];
        
        // प्रीफिक्स न्यूनतम
        for (int i = 1; i < size; i++) {
            Left[i] = min(Left[i - 1], arr[i]);
        }
        
        // सफिक्स न्यूनतम
        for (int i = size - 2; i >= 0; i--) {
            Right[i] = min(Right[i + 1], arr[i]);
        }
        
        int MaxValue = INT_MIN;
        // अधिकतम संभव मान प्राप्त करें
        for (int i = 0; i < size - 1; i++) {
            MaxValue = max(MaxValue, max(Left[i], Right[i + 1]));
        }
        return MaxValue;
    }
}

int main() {
    int arr[] = {9, 4, 12, 5, 6, 11};
    int size = sizeof(arr) / sizeof(arr[0]);
    int K = 2;
    cout << "Maximize the maximum among minimum of K consecutive sub-arrays is: " << Max(arr, size, K);
    return 0;
}

आउटपुट

Maximize the maximum among minimum of K consecutive sub-arrays is: 11

  1. - C++ में अधिकतम उत्पाद वाले चौगुनी (Quadruples) की संख्या ज्ञात करें

    मान लीजिए हमारे पास n तत्वों का एक पूर्णांक सरणी है। हमें सरणी में एक चौगुनी का अधिकतम उत्पाद ढूंढना है। इसलिए यदि सरणी [3, 5, 20, 6, 10] की तरह है, तो अंतिम उत्पाद 6000 है, और चौगुनी में तत्व 10, 5, 6, 20 हैं। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे: सरणी को आरोही क्रम में सॉर्ट करें मान ली

  1. - C++ में सभी संभावित सब-एरेज में न्यूनतम LCM और GCD

    मान लीजिए हमारे पास आकार N की एक सरणी arr है। इसमें N धनात्मक संख्याएं हैं। हमें सभी संभावित सबएरेज के न्यूनतम एलिमेंट्स ढूंढने हैं। मान लीजिए सरणी {2, 66, 14, 521} है, तो न्यूनतम LCM 2 है, और GCD 1 है। हम इस समस्या को लालची दृष्टिकोण का उपयोग करके हल करेंगे। यदि हम एलिमेंट्स की संख्या घटाते हैं, तो

  1. - ग्राफ में मैक्सिमम कट खोजने के लिए C++ प्रोग्राम

    इस प्रोग्राम में ग्राफ में मैक्सिमम कट खोजने के लिए, हमें ग्राफ की एज कनेक्टिविटी (Edge Connectivity) ज्ञात करनी होती है। एक ग्राफ की एज कनेक्टिविटी का अर्थ है एक ब्रिज (Bridge), जिसे हटाने पर ग्राफ डिस्कनेक्ट हो जाता है। एक डिस्कनेक्टेड अनडायरेक्टेड ग्राफ में ब्रिज को हटाने पर कनेक्टेड कॉम्पोनेंट्