কম্পিউটার

C++ এ একটি অ্যারেতে সর্বোচ্চ ভারসাম্যের যোগফল


সমস্যা বিবৃতি

একটি অ্যারে arr[] দেওয়া. উপসর্গ যোগফলের সর্বাধিক মান খুঁজুন যা সূচক i in 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

অ্যালগরিদম

  • অ্যারে অতিক্রম করুন এবং অ্যারে প্রিসাম[]-এ প্রতিটি সূচকের উপসর্গের যোগফল সংরক্ষণ করুন, যেখানে প্রিসাম[i] সাবয়ারের অ্যারের যোগফল সংরক্ষণ করে[0..i]
  • আবার অ্যারে ট্র্যাভার্স করুন এবং প্রত্যয় যোগফলকে অন্য অ্যারের সাফসাম[]-এ সঞ্চয় করুন, যেখানে সাফসাম[i] সাবয়ারের অ্যারের যোগফল সংরক্ষণ করে[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. C++-এ সর্বাধিক K অ্যারে উপাদানের চিহ্ন ফ্লিপ করে সর্বাধিক সাব্যারে যোগফল

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

  4. C++ এ একটি সমষ্টি অ্যারে ধাঁধা?