เราจำเป็นต้องเขียนฟังก์ชัน 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