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

C++ में अधिकतम परिपत्र उपसरणी योग


हमें एक सरणी दी गई है और कार्य उपसरणी बनाना है जैसे कि परिपत्र तरीके से उपसरणी का योग अधिकतम मान देगा।

इनपुट - int arr[] = {1, 2, 8, 4, 3, 0, 7}

आउटपुट - अधिकतम परिपत्र उपसरणी योग - 22

व्याख्या - हमें एक सरणी दी गई है जिसमें {1, 2, 8, 4, 3, 0, 7} है और इसके अधिकतम योग वाली उपसरणी 7 + 1 + 2 + 8 + 4 = 22 होगी।

इनपुट - int arr[] = {2, 5, -1, 6, 9, 4, -5}

आउटपुट - अधिकतम परिपत्र उपसरणी योग - 25

व्याख्या - हमें एक सरणी दी गई है जिसमें {2, 5, -1, 6, 9, 4, -5} है और इसके अधिकतम योग वाली उपसरणी 4 + 2 + 5 - 1 + 6 + 9 = 25 होगी।

उपयोग किया गया दृष्टिकोण

  • सकारात्मक और नकारात्मक मानों वाले पूर्णांक तत्वों की एक सरणी इनपुट करें।
  • सरणी का आकार गणना करें।
  • आगे की प्रक्रिया के लिए सरणी और आकार को फ़ंक्शन में पास करें।
  • एक अस्थायी चर total बनाएं और इसे 0 पर सेट करें
  • i से 0 से सरणी के आकार तक लूप FOR शुरू करें
  • लूप के अंदर, total को total + arr[i] के साथ सेट करें
  • temp = arr[0], temp_2 = arr[0], temp_3 = arr[0], temp_4 = arr[0] सेट करें
  • i से 1 से सरणी के आकार तक लूप FOR शुरू करें
  • लूप के अंदर सेट करें: temp = max(temp + arr[i], arr[i]), temp_2 = max(temp_2, temp), temp_3 = min(temp_3 + arr[i], arr[i]), temp_4 = min(temp_4, temp_3)
  • जांचें IF size == 1 तो arr[0] लौटाएं
  • जांचें IF temp_4 == total तो temp_2 लौटाएं
  • max_sum = max(temp_3, total - temp_4) सेट करें
  • max_sum लौटाएं
  • परिणाम प्रिंट करें।

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

int maximum(int arr[], int size) {
    int total = 0;
    for (int i = 0; i < size; i++) {
        total += arr[i];
    }
    int temp = arr[0];
    int temp_2 = arr[0];
    int temp_3 = arr[0];
    int temp_4 = arr[0];
    for (int i = 1; i < size; i++) {
        temp = max(temp + arr[i], arr[i]);
        temp_2 = max(temp_2, temp);
        temp_3 = min(temp_3 + arr[i], arr[i]);
        temp_4 = min(temp_4, temp_3);
    }
    if (size == 1) {
        return arr[0];
    }
    if (temp_4 == total) {
        return temp_2;
    }
    int max_sum = max(temp_3, total - temp_4);
    return max_sum;
}

int main() {
    int arr[] = { 2, 5, -1, 6, 9, 4, -5 };
    int size = sizeof(arr) / sizeof(arr[0]);
    cout << "Maximum circular subarray sum is: " << maximum(arr, size) << endl;
    return 0;
}

आउटपुट

Maximum circular subarray sum is: 25
  1. - C++ में ऐरे में अधिकतम संतुलन योग

    समस्या कथन एक ऐरे arr[] दिया गया है। इंडेक्स i के लिए arr[] में अधिकतम प्रीफिक्स योग का मान ढूंढें जो सफिक्स योग भी हो। उदाहरण यदि इनपुट ऐरे है - Arr[] = {1, 2, 3, 5, 3, 2, 1} तो आउटपुट 11 है - प्रीफिक्स योग = arr[0..3] = 1 + 2 + 3 + 5 = 11 और सफिक्स योग = arr[3..6] = 5 + 3 + 2 + 1 = 11 एल्गोरिदम

  1. - सख्ती से बढ़ते सब-अर्रे का अधिकतम योग खोजें C++ में

    मान लीजिए हमारे पास n पूर्णांकों का एक ऐरे है। सख्ती से बढ़ते सब-अर्रे का अधिकतम योग खोजें। तो यदि ऐरे [1, 2, 3, 2, 5, 1, 7] जैसा है, तो योग 8 होगा। इस ऐरे में तीन सख्ती से बढ़ते सब-अर्रे हैं ये हैं {1, 2, 3}, {2, 5} और {1, 7}। अधिकतम योग वाला सब-अर्रे {1, 7} है। इस समस्या को हल करने के लिए, हमें अध

  1. - C++ में डिवाइड एंड कंकर का उपयोग करके अधिकतम योग सबएरे

    मान लीजिए हमारे पास धनात्मक और ऋणात्मक मानों के साथ डेटा की एक सूची है। हमें सन्निहित सबएरे का योग ढूंढना है जिसका योग सबसे बड़ा है। मान लीजिए सूची में {-2, -5, 6, -2, -3, 1, 5, -6} है, तो अधिकतम सबएरे का योग 7 है। यह {6, -2, -3, 1, 5} का योग है।हम इस समस्या को डिवाइड एंड कंकर विधि का उपयोग करके हल