আমাদের একটি অ্যারে আছে বিবেচনা করুন, n বিভিন্ন উপাদান আছে. আমাদের অ্যারে থেকে একটি জোড়া (x, y) খুঁজে বের করতে হবে, যেমন x এবং y-এর গুণফল সর্বোচ্চ। অ্যারেতে ইতিবাচক বা নেতিবাচক উপাদান থাকতে পারে। ধরুন একটি অ্যারে হল:A =[-1, -4, -3, 0, 2, -5], তাহলে পেয়ারটি হবে (-4, -5) যেহেতু পণ্যটি সর্বাধিক।
এই সমস্যা সমাধানের জন্য, আমাদের চারটি সংখ্যা ট্র্যাক করতে হবে, পজিটিভ_ম্যাক্স, ধনাত্মক_সেকেন্ড_ম্যাক্স, নেগেটিভ_ম্যাক্স, নেগেটিভ_সেকেন্ড_ম্যাক্স। শেষে যদি (ধনাত্মক_ম্যাক্স * পজিটিভ_সেকেন্ড_ম্যাক্স) এর থেকে বড় হয় (ঋণাত্মক_ম্যাক্স * নেগেটিভ_সেকেন্ড_ম্যাক্স), তাহলে ধনাত্মক জোড়া ফেরত দিন, অন্যথায় নেতিবাচক জোড়া ফেরত দিন।
উদাহরণ
#include<iostream> #include<cmath> using namespace std; void maxProdPair(int arr[], int n) { if (n < 2) { cout << "No pair is present"; return; } if (n == 2) { cout << "(" << arr[0] << ", " << arr[1] << ")" << endl; return; } int pos_max = INT_MIN, pos_second_max = INT_MIN; int neg_max = INT_MIN, neg_second_max = INT_MIN; for (int i = 0; i < n; i++) { if (arr[i] > pos_max) { pos_second_max = pos_max; pos_max = arr[i]; } else if (arr[i] > pos_second_max) pos_second_max = arr[i]; if (arr[i] < 0 && abs(arr[i]) > abs(neg_max)) { neg_second_max = neg_max; neg_max = arr[i]; } else if(arr[i] < 0 && abs(arr[i]) > abs(neg_second_max)) neg_second_max = arr[i]; } if (neg_max*neg_second_max > pos_max*pos_second_max) cout << "(" << neg_max << ", " << neg_second_max << ")" << endl; else cout << "(" << pos_max << ", " << pos_second_max << ")" << endl; } int main() { int arr[] = {-1, -4, -3, 0, 2, -5}; int n = sizeof(arr)/sizeof(arr[0]); maxProdPair(arr, n); }
আউটপুট
(-5, -4)