यह देखते हुए कि एक सरणी 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