সম দৈর্ঘ্যের অ্যারেকে দুটি সমান পার্টে ভাগ করে প্রতিটির যোগফল গুণ করা।
উদাহরণ
arr = [1, 2, 3, 4] Left: [1, 2] → sum = 3 Right: [3, 4] → sum = 7 Product: 3 × 7 = 21
সমাধান
const subArrayProduct = (arr) => {
const len = arr.length;
// ভ্যালিডেশন: সম দৈর্ঘ্য
if (len % 2 !== 0) {
throw new Error('Array length must be even');
}
const mid = len / 2;
let leftSum = 0, rightSum = 0;
for (let i = 0; i < mid; i++) leftSum += arr[i];
for (let i = mid; i < len; i++) rightSum += arr[i];
return leftSum * rightSum;
};
// reduce ব্যবহার করে
const subArrayProductReduce = (arr) => {
const mid = arr.length / 2;
const leftSum = arr.slice(0, mid).reduce((a, b) => a + b, 0);
const rightSum = arr.slice(mid).reduce((a, b) => a + b, 0);
return leftSum * rightSum;
};
// একই লুপে (দ্রুত)
const subArrayProductSingleLoop = (arr) => {
const mid = arr.length / 2;
let left = 0, right = 0;
for (let i = 0; i < arr.length; i++) {
if (i < mid) left += arr[i];
else right += arr[i];
}
return left * right;
};
// টেস্ট
console.log(subArrayProduct([1, 2, 3, 4])); // 21
console.log(subArrayProductReduce([1, 2, 3, 4])); // 21
console.log(subArrayProductSingleLoop([1, 2, 3, 4])); // 21
ব্যাখ্যা
- সম দৈর্ঘ্য চেক: অড দৈর্ঘ্য হলে মাঝপথি উপাদান কোন সাইডে যাবে?
- স্লাইস + রিডিউস: পড়া সহজ, কিন্তু অতিরিক্ত অ্যারে তৈরি হয়
- সিংল লুপ: সবচেয়ে মেমরি-এফিশিয়েন্ট
উৎপাদন
21