ตรวจสอบว่าสามารถแบ่งอาร์เรย์เป็น 2 กลุ่มได้หรือไม่: 1 สมาชิก และอีกส่วน ที่ผลคูณของอีกส่วนเท่ากับสมาชิกตัวนั้น
ตัวอย่าง
Input: [1, 56, 2, 4, 7] 56 = 1 × 2 × 4 × 7 = 56 → true
ตัวอย่างโค้ด
const arr = [1, 56, 2, 4, 7];
const isEqualPartition = arr => {
const creds = arr.reduce((acc, val) => {
let { prod, max } = acc;
if (val > max || !max) {
prod *= (max || 1); // คูณค่าสูงสุดเดิม
max = val; // อัปเดตค่าสูงสุดใหม่
} else {
prod *= val; // คูณค่าที่ไม่ใช่ค่าสูงสุด
}
return { prod, max };
}, { prod: 1, max: null });
return creds.max === creds.prod;
};
console.log(isEqualPartition(arr));
การทำงาน
- หาค่าสูงสุด (max) และผลคูณของค่าอื่นทั้งหมด (prod)
- ถ้า max === prod → true
- สมมติว่ามีค่าสูงสุดเพียงค่าเดียวที่เป็น candidate
ผลลัพธ์
true
ข้อจำกัด: ทำงานได้ก็ต่อเมื่อมีค่าสูงสุดเพียงค่าเดียวที่เป็น candidate สำหรับกรณีทั่วไปต้องตรวจสอบทุกสมาชิก