এই সমস্যায় একটি পূর্ণসংখ্যার অ্যারে arr[] দেওয়া আছে। আমাদের C++-এ দুই ট্রাভার্সাল ব্যবহার করে সর্বোচ্চ গুণফল সাবঅ্যারে বের করার প্রোগ্রাম লিখতে হবে।
সমস্যার বিবরণ - অ্যারেতে বাম থেকে ডান (ইন্ডেক্স ০ থেকে n-1) এবং ডান থেকে বাম (ইন্ডেক্স n-1 থেকে ০) - দুটি ট্রাভার্সাল করব। বাকি অ্যালগরিদম সর্বোচ্চ গুণফল সাবঅ্যারে বের করার মতোই।
উদাহরণ:
ইনপুট
arr[] = {4, -2, 5, -6, 0, 8}আউটপুট
240
ব্যাখ্যা
Subarray = {4, -2, 5, -6} Maximum product = 4 * (-2) * 5 * (-6) = 240সমাধানের পদ্ধতি
দুটি লোকাল ম্যাক্সিমাম মান রাখুন: frntMax (বাম থেকে ডান) এবং rearMax (ডান থেকে বাম)। শূন্য পাওয়া গেলে ১ রিসেট করুন। সর্বোচ্চ মান হবে max(frntMax, rearMax)।
উদাহরণ
#include<iostream>
using namespace std;
int CalcMaxProductSubArray(int arr[], int n) {
int frntMax = 1, rearMax = 1, maxVal = 1;
for (int i=0; i=0; i--) {
rearMax = rearMax * arr[i];
if (rearMax == 0)
rearMax = 1;
}
maxVal = max(frntMax, rearMax);
return maxVal;
}
int main() {
int arr[] = {4, -2, 5, -6, 0, 8};
int n = sizeof(arr)/sizeof(arr[0]);
cout<<"Maximum product subarray is "<আউটপুট
Maximum product subarray is 240