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

C++ में सरणी में abs(i – j) * min(arr[i], arr[j]) का अधिकतम मान ज्ञात करें


इस समस्या में, हमें N पूर्णांक मानों वाली एक सरणी arr[] दी गई है। हमारा कार्य सरणी arr[] में abs(i – j) * min(arr[i], arr[j]) का अधिकतम मान ज्ञात करना है।

समस्या विवरण - हमें दो तत्वों के न्यूनतम मान और उनके इंडेक्स के बीच निरपेक्ष अंतर के गुणनफल का अधिकतम मान खोजना है। यानी दो मान i और j के लिए, हमें अधिकतम करना है: abs(i - j) * min(arr[i], arr[j])।

इनपुट

arr[] = {5, 7, 3, 6, 4}

आउटपुट

16

व्याख्या

अधिकतम मान 16 है, इंडेक्स 0 और 4 के बीच => abs(0 - 4)*min(arr[0], arr[4]) => 4*min(5, 4) => 4*4 = 16

समाधान दृष्टिकोण

समस्या का एक सरल समाधान नेस्टेड लूप का उपयोग करना है। हम दो लूप लेंगे और i और j के प्रत्येक जोड़े के लिए मान की गणना करेंगे। और फिर पाए गए सभी मानों में से अधिकतम लौटाएँगे।

यह दृष्टिकोण अच्छा है लेकिन इसकी समय जटिलता O(n²) क्रम की है।

समस्या का एक प्रभावी समाधान दो इटरेटर मानों का उपयोग करना है, एक सरणी की शुरुआत से और दूसरा अंत से। इटरेटर्स के प्रत्येक मान के लिए हम आवश्यक मान खोजेंगे और उनकी तुलना करेंगे और अधिकतम को maxVal चर में संग्रहीत करेंगे। हम इसे तब तक करेंगे जब तक दोनों इटरेटर्स एक-दूसरे को पार न कर लें और अंत में maxVal लौटाएँगे।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम:

उदाहरण

#include<iostream> using namespace std; int calcMaxProdValue(int arr[], int n) {    int maxVal = -100;    int currentVal;    int start = 0, end = n-1;    while (start < end) {       if (arr[start] < arr[end]) {          currentVal = arr[start]*(end-start);          start++;       }       else {          currentVal = arr[end]*(end-start);          end--;       }       maxVal = max(maxVal, currentVal);    }    return maxVal; } int main(){    int arr[] = {5, 7, 3, 6, 4};    int n = sizeof(arr)/sizeof(arr[0]);    cout<<"The maximum value of abs(i – j) * min(arr[i], arr[j]) in an array is "<<calcMaxProdValue(arr,n);    return 0; }

आउटपुट

The maximum value of abs(i – j) * min(arr[i], arr[j]) in an array is 16

  1. - C++ में पूर्णांकों की सरणी में अधिकतम गुणनफल वाली जोड़ी ढूंढें

    समस्या विवरण एक सरणी A दी गई है जिसमें n तत्व हैं (सकारात्मक और नकारात्मक दोनों)। हमें एक जोड़ी (x, y) ढूंढनी है जिसका गुणनफल अधिकतम हो। उदाहरण के लिए, सरणी A = [-1, -4, -3, 0, 2, -5] के लिए, अधिकतम गुणनफल वाली जोड़ी (-4, -5) होगी क्योंकि उनका गुणनफल 20 है। हल दृष्टिकोण हमें चार मान ट्रैक करने हों

  1. - C++ में सरणी में अधिकतम GCD वाली जोड़ी ढूंढना

    मान लीजिए हमारे पास धनात्मक पूर्णांकों की एक सरणी है। हमारा कार्य सरणी से पूर्णांकों की जोड़ी ढूंढना है, जहां GCD मान अधिकतम है। मान लीजिए A = {1, 2, 3, 4, 5}, तो आउटपुट 2 है। जोड़ी (2, 4) का GCD 2 है, अन्य GCD मान 2 से कम हैं।इस समस्या को हल करने के लिए, हम एक काउंट सरणी बनाए रखेंगे जो प्रत्येक तत्

  1. - C++ प्रोग्राम किसी भी बीजगणितीय अभिव्यक्ति का अधिकतम मान खोजने के लिए

    यह किसी भी बीजगणितीय अभिव्यक्ति का अधिकतम मान खोजने के लिए एक C++ प्रोग्राम है। (x1 + x2 + ... + xa) * (y1 + y2 + ... + yb) रूप का एक बीजगणितीय अभिव्यक्ति और (a + b) इंटीजर्स दिए गए हैं। a नंबर्स और शेष b नंबर्स के सभी संभावित संयोजनों पर विचार करें और उनके मानों की गणना करें, जिससे अधिकतम मान प्रा