কম্পিউটার টিউটোরিয়াল

সি++-এ কমপক্ষে K সংখ্যা বিশিষ্ট সর্বোচ্চ যোগফল উপঅ্যারে (Subarray)

একটি অ্যারে এবং সংখ্যা k দেওয়া থাকলে, কমপক্ষে kটি উপাদান বিশিষ্ট উপঅ্যারেটির সর্বোচ্চ যোগফল বের করতে হবে।

অ্যালগরিদম (Kadane's Algorithm вариেশন)

  • maxSum[i] = সূচক i পর্যন্ত শেষ হওয়া সর্বোচ্চ সাবঅ্যারে যোগফল।
  • প্রথম k উপাদানের যোগফল sum-এ রাখুন।
  • k থেকে n-1 পর্যন্ত লুপ: স্লাইডিং উইন্ডো দিয়ে sum আপডেট করুন।
  • result = max(result, sum, sum + maxSum[i-k])।

সি++ ইমপ্লিমেন্টেশন

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

int getMaxSum(int a[], int n, int k) {
    vector maxSum(n);
    maxSum[0] = a[0];
    int currMax = a[0];
    for (int i = 1; i < n; i++) {
        currMax = max(a[i], currMax + a[i]);
        maxSum[i] = currMax;
    }
    int sum = 0;
    for (int i = 0; i < k; i++) sum += a[i];
    int result = sum;
    for (int i = k; i < n; i++) {
        sum += a[i] - a[i - k];
        result = max(result, sum);
        result = max(result, sum + maxSum[i - k]);
    }
    return result;
}

int main() {
    int a[] = {5, 3, 7, -5, 6, 2, 1};
    int k = 6;
    cout << getMaxSum(a, 7, k) << endl; // 19
    return 0;
}

আউটপুট

19
  1. সার্কুলার সাবঅ্যারে সর্বোচ্চ সমষ্টি C++-এ

  2. C++-এ Subarray Sum Equals K

  3. C++-এ প্রাইম P-এর পরের প্রাইম নম্বর जिनका যোগফল S

  4. C++-এ ম্যাক্সিমাম সাবঅ্যারে সাম মডুলো m