সমস্যা বিবরণ
একটি নাম্বার অ্যারে এবং একটি সংখ্যা n দেওয়া আছে। অ্যারে থেকে n সংখ্যা বেছে নিয়ে সর্বোচ্চ গুণফল বের করতে হবে।
সমাধান
const getHighestProduct = (arr, num) => {
let prod = 1;
const sorter = (a, b) => a - b;
arr.sort(sorter);
if (num > arr.length || (num & 2 && arr[arr.length - 1] < 0)) {
return;
}
if (num % 2) {
prod = arr.pop();
num--;
}
while (num) {
prod *= arr[0] * arr[1] > arr[arr.length - 2] * arr[arr.length - 1]
? arr.shift() * arr.shift()
: arr.pop() * arr.pop();
num -= 2;
}
return prod;
};
console.log(getHighestProduct([1, 10, -5, 1, -100], 3)); // 5000
console.log(getHighestProduct([3, 4, 5, 6, 7], 3)); // 210
console.log(getHighestProduct([3, 4, -5, -6, -7], 3)); // 168
আউটপুট
5000 210 168
অ্যালগরিদম ব্যাখ্যা
- অ্যারে সর্ট করা হয়।
- যদি n বিজোড় হয়, সবচেয়ে বড় নম্বর (পপ) নিয়ে গুণ করা হয়।
- বাকি জোড় সংখ্যক নম্বরের জন্য: সবচেয়ে ছোট দুটি (নেগেটিভ হলে গুণফল পজেটিভ হয়) এবং সবচেয়ে বড় দুটির গুণফল তুলনা করে বড়টাই নেওয়া হয়।