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 - के=1

    जब k=1 उप-सरणी सरणी के बराबर होती है और इसलिए सरणी में न्यूनतम मान आउटपुट होगा।

  • केस 2 - K=2

    यह एक कठिन मामला है। इस मामले में हमें दो सरणियाँ बनानी होंगी जिनमें उपसर्ग और प्रत्यय न्यूनतम होंगे क्योंकि सरणी को केवल 2 भागों में विभाजित किया जा सकता है। फिर सरणी के प्रत्येक तत्व के लिए हमें ऐसा करना होगा -

    MaxValue =max(MaxValue, max(i पर न्यूनतम मान उपसर्ग करें, i+1 पर अधिकतम मान प्रत्यय करें))

उदाहरण

#include <bits/stdc++.h>
using namespace std;
/* Function to find the maximum possible value
of the maximum of minimum of K sub-arrays*/
int Max(const int* arr, int size, int K){
   dint Max;
   int Min;
   //Obtain maximum and minimum
   for (int i = 0; i < size; i++){
      Min = min(Min, arr[i]);
      Max = max(Max, arr[i]);
   }
   //When K=1, return minimum value
   if (K == 1){
      return Min;
   }
   //When K>=3, return maximum value
   else if (K >= 3){
      return Max;
   }
   /*When K=2 then make prefix and suffix minimums*/
   else{
      // Arrays to store prefix and suffix minimums
      int Left[size], Right[size];
      Left[0] = arr[0];
      Right[size - 1] = arr[size - 1];
      // Prefix minimum
      for (int i = 1; i < size; i++){
         Left[i] = min(Left[i - 1], arr[i]);
      }
      // Suffix minimum
      for (int i = size - 2; i >= 0; i--){
         Right[i] = min(Right[i + 1], arr[i]);
      }
      int MaxValue=INT_MIN;
      // Get the maximum possible value
      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++ में अधिकतम उत्पाद चौगुनी संख्या ज्ञात कीजिए

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

  1. C++ में सभी संभावित उप-सरणियों के बीच न्यूनतम LCM और GCD संभव है

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

  1. सी ++ प्रोग्राम एक ग्राफ में अधिकतम कट खोजने के लिए

    इस प्रोग्राम में ग्राफ में अधिकतम कट खोजने के लिए, हमें ग्राफ की एज कनेक्टिविटी को खोजने की जरूरत है। ग्राफ़ के ग्राफ़ की एक एज कनेक्टिविटी का अर्थ है कि यह एक पुल है, इसे हटाने से ग्राफ़ डिस्कनेक्ट हो जाएगा। डिस्कनेक्ट किए गए अप्रत्यक्ष ग्राफ़ में पुल को हटाने के साथ जुड़े घटकों की संख्या बढ़ जाती