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

C++ में k लंबाई का अधिकतम औसत उपसरणी ढूंढें


इस समस्या में, हमें आकार n की एक सरणी arr[] दी गई है जिसमें धनात्मक और ऋणात्मक मान हैं और एक पूर्णांक k। हमारा कार्य k लंबाई का अधिकतम औसत उपसरणी ढूंढना है।

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

इनपुट: arr[] = {4, -1, 5, 6, -2, 4} k = 3

आउटपुट: 10

व्याख्या:

आकार 3 का उपसरणी जिसका अधिकतम योग है: -1, 5, 6 = 10

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

समस्या का एक समाधान सहायक सरणी का उपयोग करके किया जाता है जो सरणी में वर्तमान सूचकांक तक संचयी योग संग्रहीत करता है।

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

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

उदाहरण

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

int findMaxSubArrayAverage(int arr[], int n, int k) {
    if (k > n)
        return -1;
    int *auxSumArray = new int[n];
    auxSumArray[0] = arr[0];
    for (int i=1; i<n; i++)
        auxSumArray[i] = auxSumArray[i-1] + arr[i];
    int maxSum = auxSumArray[k-1], subEndIndex = k-1;
    for (int i=k; i<n; i++) {
        int sumVal = auxSumArray[i] - auxSumArray[i-k];
        if (sumVal > maxSum) {
            maxSum = sumVal;
            subEndIndex = i;
        }
    }
    return subEndIndex - k + 1;
}

int main() {
    int arr[] = {4, -1, 5, 6, -2, 4};
    int k = 3;
    int n = sizeof(arr)/sizeof(arr[0]);
    cout<<"The maximum average subarray of length "<<k<<" begins at index "<<findMaxSubArrayAverage(arr, n, k);
    return 0;
}

आउटपुट

The maximum average subarray of length 3 begins at index 1

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

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

  1. - C++ में LCM उत्पाद के बराबर होने वाले अधिकतम लंबाई के सबएरे

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

  1. - C++ में पेयर्स की अधिकतम लंबाई चेन

    पेयर्स की एक चेन दी गई है। प्रत्येक पेयर में दो इंटीजर हैं और पहला इंटीजर हमेशा छोटा होता है, और दूसरा बड़ा, यही नियम चेन निर्माण के लिए भी लागू होता है। एक पेयर (x, y) को पेयर (p, q) के बाद तभी जोड़ा जा सकता है जब q < x हो।इस समस्या को हल करने के लिए, सबसे पहले हमें दिए गए पेयर्स को पहले एलिमेंट