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

अधिकतम उत्पाद सबरे | सी ++ में नकारात्मक उत्पाद केस जोड़ा गया

इस समस्या में, हमें पूर्णांकों (सकारात्मक और ऋणात्मक) की एक सरणी दी गई है। हमारा काम C++ में अधिकतम ProductSubarray की गणना करने के लिए एक प्रोग्राम बनाना है।

समस्या समाधान - यहां, हमारे पास एक सरणी है जिसमें सकारात्मक, नकारात्मक और शून्य संख्याएं हैं। हमें सरणी के तत्वों द्वारा बनाए गए उप-सरणी के उत्पाद को खोजने की आवश्यकता है। और उपसरणी के उत्पाद को अधिकतम करें।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

arr[] = {-1, 2, -7, -5, 12, 6}

आउटपुट

5040

स्पष्टीकरण

अधिकतम उत्पाद के साथ उप-सरणी {2, -7, -5, 12, 6}

. है
Product = 5040

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

इस समस्या को हल करने के लिए, हमें एक सरणी और उप-सरणी का अधिकतम उत्पाद दिया जाता है और अधिकतम वैल का प्रबंधन करता है जो वर्तमान तत्व तक अधिकतम उत्पाद है और न्यूनतम वैल उत्पाद का नकारात्मक अधिकतम है। फिर वर्तमान मान के आधार पर, maxVal और minVal को −

. के रूप में अद्यतन किया जाता है

केस 1 - तत्व सकारात्मक है − सरणी को गुणा करके maxVal और minVal को अपडेट करें।

केस 2 - तत्व शून्य है - वर्तमान उप-सरणी को तोड़ें क्योंकि 0 से गुणा करने पर परिणाम 0 होगा।

केस 3 - तत्व नकारात्मक है − दोनों मानों को ऋणात्मक मानों के साथ अद्यतन करें जिससे इसकी अधिकतमता हो।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <iostream>
using namespace std;
int min(int a, int b){
   if(a < b)
      return a;
      return b;
}
int max(int a, int b){
   if(a > b)
      return a;
      return b;
}
int CalcMaxProductSubArray(int arr[], int n) {
   int i = 0;
   int maxVal = -1000;
   int localMax = 1;
   int localMin = 1;
   int lastMax;
   while(i < n) {
      int currentVal = arr[i];
      if (currentVal > 0) {
         localMax = (localMax * currentVal);
         localMin = min(1, localMin * currentVal);
      }
      else if (currentVal < 0) {
         lastMax = localMax;
         localMax = (localMin * currentVal);
         localMin = (lastMax * currentVal);
      } else {
         localMin = 1;
         localMax = 0;
      }
      maxVal = max(maxVal, localMax);
      if (localMax <= 0)
         localMax = 1;
         i++;
   }
   return maxVal;
}
int main(){
   int arr[] = { -1, 2, -7, -5, 12, 6 };
   int n = 6;
   cout<<"The maximum product Subarray is "<<CalcMaxProductSubArray(arr, n);
   return 0;
}

आउटपुट

The maximum product Subarray is 5040
. है
  1. सी ++ में एक पेड़ में दो गैर-अंतर्विभाजक पथों का अधिकतम उत्पाद

    इस समस्या में, हमें n नोड्स के साथ एक अप्रत्यक्ष कनेक्टेड ट्री T दिया जाता है। हमारा कार्य C++ में एक ट्री में दो गैर-अंतर्विभाजकपथों के अधिकतम उत्पाद को खोजने के लिए एक प्रोग्राम बनाना है। समस्या का विवरण - एक पेड़ में दो अप्रतिच्छेदी पथों का अधिकतम गुणनफल ज्ञात करना। हम सभी गैर-दिलचस्प पथ खोजेंगे

  1. C++ में उपसर्ग योग का उपयोग करते हुए O(n) में अधिकतम सबअरे योग

    समस्या कथन सकारात्मक और नकारात्मक पूर्णांकों की एक सरणी को देखते हुए, उस सरणी में अधिकतम सबअरे योग ज्ञात करें उदाहरण यदि इनपुट ऐरे − {-12, -5, 4, -1, -7, 1, 8, -3} है तो आउटपुट 9 है एल्गोरिदम इनपुट सरणी के उपसर्ग योग की गणना करें। प्रारंभ करें− min_prefix_sum =0, रेस =-अनंत i =0 से n के ल

  1. सी ++ में उत्पाद के बराबर एलसीएम के साथ अधिकतम लंबाई उपसरणी

    मान लीजिए कि हमारे पास एक सरणी A है। हमें उप-सरणी की अधिकतम लंबाई ज्ञात करनी है, जिसका LCM उस उप-सरणी के तत्वों के गुणनफल के समान है। यदि उस प्रकार का उप-सरणी नहीं मिलता है, तो -1 लौटाएं। मान लीजिए सरणी {6, 10, 21} है, तो लंबाई 2 है, क्योंकि उप-सरणी {10, 21} है, जिसका एलसीएम 210 है, और उत्पाद भी 210