เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของจำนวนเต็มเป็นอาร์กิวเมนต์เท่านั้น
ฟังก์ชันควรกำหนดว่ามีวิธีใดบ้างที่เราสามารถแบ่งอาร์เรย์ออกเป็นสองอาร์เรย์ย่อย เพื่อให้ผลรวมขององค์ประกอบที่มีอยู่ในอาร์เรย์ย่อยทั้งสองมีค่าเท่ากัน ในขณะที่แบ่งองค์ประกอบออกเป็นอาร์เรย์ย่อย เราต้องตรวจสอบให้แน่ใจว่าไม่มีองค์ประกอบจากอาร์เรย์ดั้งเดิมเหลืออยู่
ตัวอย่างเช่น −
หากอาร์เรย์อินพุตเป็น −
const arr = [5, 3, 7, 4, 1, 8, 2, 6];
จากนั้นผลลัพธ์ควรเป็น −
const output = true;
เพราะอาร์เรย์ย่อยที่ต้องการคือ [5, 3, 4, 6] และ [7, 1, 8, 2] โดยทั้งคู่มีผลรวมเท่ากับ 18
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const arr = [5, 3, 7, 4, 1, 8, 2, 6]; const canPartition = (arr = []) => { const sum = arr.reduce((acc, val) => acc + val); if (sum % 2 !== 0){ return false; }; const target = sum / 2; const array = new Array(target + 1).fill(false); array[0] = true; for (const num of arr) { if (array[target - num]){ return true }; for (let i = target; i >= num; i--) { array[i] = array[i - num]; } } return false; }; console.log(canPartition(arr));
ผลลัพธ์
ต่อไปนี้เป็นเอาต์พุตคอนโซล -
true