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

C++-এ অ্যারেতে abs(i-j)*min(arr[i],arr[j]) এর সর্বোচ্চ মান খুঁজুন

এই সমস্যায়, আমাদের একটি অ্যারে arr[] দেওয়া আছে যাতে N সংখ্যক পূর্ণসংখ্যা থাকে। আমাদের কাজ হলো abs(i-j) * min(arr[i], arr[j]) এর সর্বোচ্চ মান খুঁজে বের করা।

সমস্যা বিবরণ

দুটি ভ্যালু i এবং j-এর জন্য, আমাদের(abs(i - j) * min(arr[i], arr[j])) নিকটস্থ মান সর্বোচ্চ করতে হবে।

উদাহরণ

ইনপুট

arr[] = {5, 7, 3, 6, 4}

আউটপুট

16

ব্যাখ্যা

সর্বোচ্চ মান ১৬, ইনডেক্স ০ এবং ৪-এর মধ্যে:
abs(0 - 4) * min(arr[0], arr[4]) = 4 * min(5, 4) = 4 * 4 = 16

সমাধানের পদ্ধতি

একটি সহজ সমাধান হলো নেস্টেড লুপ ব্যবহার করা। দুটি লুপ নিয়ে i এবং j-এর সব জোড়ার জন্য মান বের করব এবং সর্বোচ্চ মান ফেরত দিব। কিন্তু এর টাইম কমপ্লেক্সিটি O(n²)।

একটি কার্যকর সমাধান হলো দুটি ইটারেটর ব্যবহার করা - একটি অ্যারের শুরু থেকে এবং অন্যটি শেষ থেকে। প্রতিটি ইটারেটর ভ্যালুর জন্য প্রয়োজনীয় মান বের করে তুলনা করব এবং সর্বোচ্চ মান maxVal-এ সংরক্ষণ করব। দুটি ইটারেটর একে অপর লাঙ্ঘন করতেই লুপ বন্ধ করে maxVal ফেরত দিব।

C++ প্রোগ্রাম উদাহরণ

#include<iostream>
using namespace std;

int calcMaxProdValue(int arr[], int n) {
    int maxVal = -100;
    int currentVal;
    int start = 0, end = n-1;
    while (start < end) {
        if (arr[start] < arr[end]) {
            currentVal = arr[start] * (end - start);
            start++;
        }
        else {
            currentVal = arr[end] * (end - start);
            end--;
        }
        maxVal = max(maxVal, currentVal);
    }
    return maxVal;
}

int main(){
    int arr[] = {5, 7, 3, 6, 4};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << "The maximum value of abs(i - j) * min(arr[i], arr[j]) in an array is " << calcMaxProdValue(arr,n);
    return 0;
}

আউটপুট

The maximum value of abs(i - j) * min(arr[i], arr[j]) in an array is 16
  1. সি++ প্রোগ্রাম: সর্টেড অ্যারেতে জ্যামিতিক ধারা (Geometric Progression) গঠনকারী সব ট্রিপলেট (Triplet) খুঁজে বের করা

  2. অ্যারে অফ ইন্টিজার থেকে সর্বোচ্চ গুণফলের জোড়া খুঁজে বের করা C++-এ

  3. C++-এ অ্যারেতে সর্বোচ্চ GCD वाली পেয়ার বের করা

  4. সি++ প্রোগ্রাম: যেকোনো বীজগাণিতিক অভিব্যক্তির সর্বোচ্চ মান (Maximum Value) বের করা