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

C++-এ দুই ট্রাভার্সাল দিয়ে সর্বোচ্চ গুণফল সাবঅ্যারে (Maximum Product Subarray - Using Two Traversals)

এই সমস্যায় একটি পূর্ণসংখ্যার অ্যারে 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
  1. C++-এ ট্রিতে দুটি অ-অন্তঃচ্ছেদী পথের সর্বোচ্চ গুণফল (Maximum product of two non-intersecting paths in a tree)

  2. C++-এ ডিভাইড এন্ড কংকর অ্যালগরিদম দিয়ে সর্বোচ্চ সাবঅ্যারে সম

  3. C++-এ LCM যা গুণফলের সমান হয় এমন সর্বোচ্চ দৈর্ঘ্যের সাবঅ্যারে

  4. C++ STL-এ accumulate দিয়ে অ্যারে প্রোডাক্ট বের করা