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

C++ में अधिकतम दो तत्वों को उलटने के बाद अधिकतम सबएरे सम


इस समस्या में, हमें एक सरणी दी गई है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में अधिकतम दो तत्वों को उलटने के बाद अधिकतम सबएरे सम ढूंढेगा।

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

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

इनपुट - सरणी = {-5, 1, 3, 8, -2, 4, 7}

आउटपुट - 30

व्याख्या - हम इंडेक्स 0 से 6 तक के तत्वों पर विचार करेंगे और -5 और -2 के मानों को उलटकर अधिकतम सम वाली सरणी प्राप्त करेंगे।

इस समस्या को हल करने के लिए, हम डायनामिक प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे। हम आकार 1 से n (सरणी की लंबाई) तक के सभी सबएरे के अधिकतम सम की जांच करेंगे। इसलिए, प्रत्येक सबएरे के लिए हमारे तीन मामले हैं -

केस 1 - सबएरे के दो तत्वों को उलटने के बाद सबएरे का अधिकतम सम।

केस 2 - सबएरे के एक तत्व को उलटने के बाद सबएरे का अधिकतम सम।

केस 3 - सबएरे के शून्य तत्वों को उलटने के बाद सबएरे का अधिकतम सम।

इसलिए, हमारे पास प्रत्येक पुनरावृत्ति के लिए, हम सरणी के अधिकतम सम और वर्तमान तत्व का अधिकतम ढूंढेंगे और अधिकतम को उससे प्रारंभ करेंगे।

हम अधिकतम सम को maxSum नामक एक 2D सरणी में संग्रहीत करेंगे। और अंतिम maxSum 2D सरणी के सभी तत्वों का अधिकतम होगा।

उदाहरण

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

#include <bits/stdc++.h> using namespace std; int findMaxSubarraySum(int a[], int n) {    int maxSubarraySum = 0;    int* arr = new int[n + 1];    for (int i = 1; i <= n; i++)       arr[i] = a[i - 1];    int** maxSum = new int*[n + 1];    for (int i = 0; i <= n; i++)       maxSum[i] = new int[3];    for (int i = 1; i <= n; ++i) {       maxSum[i][0] = max(arr[i], maxSum[i - 1][0] + arr[i]);       maxSum[i][1] = max(0, maxSum[i - 1][0]) - arr[i];       if (i >= 2)       maxSum[i][1] = max(maxSum[i][1], maxSum[i - 1][1] + arr[i]);       if (i >= 2)          maxSum[i][2] = maxSum[i - 1][1] - arr[i];       if (i >= 3)          maxSum[i][2] = max(maxSum[i][2], maxSum[i - 1][2] + arr[i]);       maxSubarraySum = max(maxSubarraySum, maxSum[i][0]);       maxSubarraySum = max(maxSubarraySum, maxSum[i][1]);       maxSubarraySum = max(maxSubarraySum, maxSum[i][2]);    }    return maxSubarraySum; } int main(){    int arr[] = {-5, 1, 3, 8, -2, 4, 7};    int n = sizeof(arr) / sizeof(arr[0]);    cout<<"Maximum subarray sum after inverting at most two elements is "<<findMaxSubarraySum(arr, n);    return 0; }

आउटपुट

Maximum subarray sum after inverting at most two elements is 30

  1. - C++ में अधिकतम उपसरणी योग मॉड्यूलो m (Maximum subarray sum modulo m)

    इस समस्या में, हमें आकार n की एक सरणी और एक पूर्णांक m दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में अधिकतम उपसरणी योग मॉड्यूलो m ढूंढे। प्रोग्राम विवरण - यहां, हम उपसरणी के सभी तत्वों के योग को m से विभाजित करके प्राप्त अधिकतम मान ढूंढेंगे। आइए एक उदाहरण से समझते हैं: इनपुट - सरणी = {4

  1. - C++ में अधिकतम K सरणी तत्वों के चिह्न बदलकर अधिकतम सबएरे सम

    इस समस्या में, हमें एक सरणी और एक पूर्णांक k दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में अधिकतम k सरणी तत्वों के चिह्न बदलकर अधिकतम सबएरे सम ढूंढेगा।कोड विवरण - यहां, हमें सरणी में अधिकतम k तत्व ढूंढने होंगे जिन्हें पलटने से इस सरणी से बने सबएरे का सम अधिकतम हो जाएगा।समस्या को समझने के

  1. - C++ में अधिकतम एक तत्व हटाकर अधिकतम सबएरे योग को अधिकतम करना

    समस्या कथन N पूर्णांकों का एक ऐरे arr[] दिया गया है। कार्य पहले अधिकतम सब-एरे योग ढूंढना है और फिर सब-एरे से अधिकतम एक तत्व हटाना है। अधिकतम एक तत्व हटाएं ताकि हटाने के बाद अधिकतम योग अधिकतम हो। यदि दिया गया इनपुट ऐरे है {1, 2, 3, -2, 3} तो अधिकतम सब-एरे योग {2, 3, -2, 3} है। फिर हम -2 हटा सकते है