แบ่งอาร์เรย์ (ความยาวคู่) เป็น 2 ครึ่ง คำนวณผลรวมแต่ละครึ่ง แล้วคูณกัน
ตัวอย่าง
[1, 2, 3, 4] → Left: 1+2=3, Right: 3+4=7 → 3 × 7 = 21
ตัวอย่างโค้ด
const arr = [1, 2, 3, 4];
const subArrayProduct = 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;
};
console.log(subArrayProduct(arr));
ผลลัพธ์
21
วิธีแบบ Single Pass (Reduce)
const subArrayProduct = arr => {
const mid = arr.length / 2;
const { left, right } = arr.reduce((acc, val, i) => {
if (i < mid) acc.left += val;
else acc.right += val;
return acc;
}, { left: 0, right: 0 });
return left * right;
};
ใช้ slice + reduce อ่านง่ายกว่า และไม่ต้อง mutation