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

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


मान लीजिए हमारे पास पूर्णांकों का एक वृत्ताकार सरणी C है जिसे सरणी A द्वारा दर्शाया गया है। हमें C के एक गैर-खाली उपसरणी का अधिकतम संभव योग ढूंढना है। एक उपसरणी में निश्चित बफर A के प्रत्येक तत्व को अधिकतम एक बार शामिल किया जा सकता है।

उदाहरण: [1,-2,3,-2] के लिए आउटपुट 3 होगा (उपसरणी [3] का योग 3)।

केडेन एल्गोरिदम + प्रीफिक्स/सफिक्स मैक्स

वृत्ताकार उपसरणी का अधिकतम योग दो मामलों में से एक हो सकता है:

  1. सामान्य (गैर-वृत्ताकार) अधिकतम उपसरणी योग (केडेन एल्गोरिदम)।
  2. वृत्ताकार उपसरणी: कुल योग - न्यूनतम उपसरणी योग (यदि सभी तत्व ऋणात्मक नहीं हैं)।

सरल दृष्टिकोण: max(kadane, totalSum - minSubarray) लेकिन सभी ऋणात्मक मामले को संभालें।

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

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

class Solution {
public:
    int maxSubarraySumCircular(vector<int>& v) {
        int n = v.size();
        int total = 0, maxSum = v[0], minSum = v[0];
        int curMax = 0, curMin = 0;
        
        for (int x : v) {
            curMax = max(x, curMax + x);
            maxSum = max(maxSum, curMax);
            
            curMin = min(x, curMin + x);
            minSum = min(minSum, curMin);
            
            total += x;
        }
        
        if (maxSum < 0) return maxSum; // सभी ऋणात्मक
        return max(maxSum, total - minSum);
    }
};

int main() {
    vector<int> v = {1, -2, 3, -2};
    Solution ob;
    cout << ob.maxSubarraySumCircular(v); // 3
    return 0;
}

इनपुट

[1,-2,3,-2]

आउटपुट

3
  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} का योग है।हम इस समस्या को डिवाइड एंड कंकर विधि का उपयोग करके हल