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

C++-এ অ্যারেতে সর্বোচ্চ ইকুইলিব্রিয়াম যোগফল


সমস্যা বিবরণ

একটি অ্যারে arr[] দেওয়া আছে। অ্যারের i ইনডেক্সে প্রিফিক্স যোগফল ও সাফিক্স যোগফল সমান হলে তার সর্বোচ্চ মান বের করুন।

উদাহরণ

ইনপুট অ্যারে যদি −

Arr[] = {1, 2, 3, 5, 3, 2, 1} হয়, তবে আউটপুট হবে ১১ কারণ −

  • প্রিফিক্স যোগফল = arr[0..3] = 1 + 2 + 3 + 5 = 11 এবং
  • সাফিক্স যোগফল = arr[3..6] = 5 + 3 + 2 + 1 = 11

অ্যালগরিদম

  • অ্যারে ট্রাভার্স করে প্রতিটি ইনডেক্সের প্রিফিক্স যোগফল presum[] অ্যারেতে সংরক্ষণ করুন, যেখানে presum[i] ধারণ করে arr[0..i]-র সাব-অ্যারের যোগফল
  • আবার অ্যারে ট্রাভার্স করে সাফিক্স যোগফল suffsum[] অ্যারেতে সংরক্ষণ করুন, যেখানে suffsum[i] ধারণ করে arr[i..n-1]-র সাব-অ্যারের যোগফল
  • প্রতিটি ইনডেক্সে যাচাই করুন presum[i] কি suffsum[i]-র সমান, এবং সমান হলে তা গ্লোবাল সর্বোচ্চের সাথে তুলনা করুন

উদাহরণ

#include <bits/stdc++.h> using namespace std; int getMaxSum(int *arr, int n) {    int preSum[n];    int suffSum[n];    int result = INT_MIN;    preSum[0] = arr[0];    for (int i = 1; i < n; ++i) {       preSum[i] = preSum[i - 1] + arr[i];    }    suffSum[n - 1] = arr[n - 1];    if (preSum[n - 1] == suffSum[n - 1]) {       result = max(result, preSum[n - 1]);    }    for (int i = n - 2; i >= 0; --i) {       suffSum[i] = suffSum[i + 1] + arr[i];       if (suffSum[i] == preSum[i]) {          result = max(result, preSum[i]);       }    }    return result; } int main() {    int arr[] = {1, 2, 3, 5, 3, 2, 1};    int n = sizeof(arr) / sizeof(arr[0]);    cout << "Max equlibrium sum = " << getMaxSum(arr, n) << endl;    return 0; }

আউটপুট

প্রোগ্রামটি কম্পাইল ও এক্সিকিউট করলে নিচের আউটপুট পাওয়া যাবে −

Max equlibrium sum = 11

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

  2. সর্বোচ্চ k সংখ্যক এলিমেন্টের চিহ্ন ফ্লিপ করে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

  3. C++-এ অ্যারেয়ের সর্বোচ্চ গড় যোগফল পার্টিশন

  4. C++-এ সম অ্যারে পাজল (Sum Array Puzzle) সমাধান