এই সমস্যায় একটি পূর্ণসংখ্যার অ্যারে arr[] এবং একটি সংখ্যা k দেওয়া আছে। আমাদের C++-এ আকার k-এর সাবসিকোয়েন্সের সর্বোচ্চ গুণফল বের করার প্রোগ্রাম লিখতে হবে।
সমস্যার বিবরণ - ১ ≤ k ≤ n আকারের সাবসিকোয়েন্স খুঁজে বের করতে হবে যেটির উপাদানগুলোর গুণফল সর্বোচ্চ।
উদাহরণ:
ইনপুট
arr[] = {1, 5, 6, -2, 0, 4}, k = 3আউটপুট
120
ব্যাখ্যা
আকার ৩-এর সাবসিকোয়েন্স (5, 6, 4) এর গুণফল ১২০।
সমাধানের পদ্ধতি
অ্যারে সর্ট করুন। k-এর চিহ্ন ও অ্যারের উপাদান অনুযায়ী কেস ভাগ করুন:
- k জোড়: সবচেয়ে বড় k উপাদান নিন (শূন্য বাদে), ঋণাত্মক জোড়ও বিবেচনা করুন
- k বিজোড়: আরও জটিল, সর্বোচ্চ উপাদানের চিহ্ন অনুযায়ী উপ-কেস: ধনাত্মক হলে মিশ্র অ্যারে, শূন্য হলে ফলাফল ০, ঋণাত্মক হলে ছোট মাঙ্গনিটিউডের উপাদান নিন
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int findMaxSubArrayProduct(int arr[], int n, int k) {
sort(arr, arr + n);
int maxProd = 1;
int i = 0, j = 0;
int maxprod, minprod;
if (arr[n - 1] == 0 && (k % 2 == 1))
return 0;
if (arr[n - 1] <= 0 && (k % 2 == 1)) {
for (i = n - 1; i >= n - k; i--)
maxProd *= arr[i];
return maxProd;
}
i = 0; j = n - 1;
if (k % 2 == 1) {
maxProd *= arr[j];
j--; k--;
}
k = k/2;
int it = 0;
while(it < k){
minprod = arr[i] * arr[i + 1];
maxprod = arr[j] * arr[j - 1];
if (minprod > maxprod) {
maxProd *= minprod;
i += 2;
} else {
maxProd *= maxprod;
j -= 2;
}
it++;
}
return maxProd;
}
int main() {
int arr[] = { 1, 5, 6, -2, 0, 4 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
cout<<"The maximum product of subsequence of size "<আউটপুট
The maximum product of subsequence of size 3 is 120