Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

Subarray จับคู่กับผลรวมเท่ากันใน JavaScript


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