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

อาร์เรย์ย่อยไบนารีที่มีผลรวมที่ต้องการใน JavaScript


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ไบนารี arr เป็นอาร์กิวเมนต์แรก และตัวเลข เป้าหมาย เป็นอาร์กิวเมนต์ที่สอง

ฟังก์ชันของเราควรจะนับจำนวนอาร์เรย์ย่อยที่มีอยู่ในอาร์เรย์ arr ผลรวมขององค์ประกอบที่มีเท่ากับการนับ ในที่สุดเราก็ควรคืนจำนวนนี้

ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ

ป้อนข้อมูล

const arr = [1, 0, 1, 0, 1];
const target = 2;

ผลผลิต

const output = 4;

คำอธิบายผลลัพธ์

เนื่องจากอาร์เรย์ย่อยที่ต้องการคือ:

[1,0,1][1,0,1,0]
[0,1,0,1]
[1,0,1]

ตัวอย่าง

const arr = [1, 0, 1, 0, 1];
const target = 2;
const countSubarrays = (arr = [], target = 1) => {
   const map = {}
   let sum = 0
   let count = 0
   for (const num of arr) {
      map[sum] = (map[sum] || 0) + 1
      sum += num
      count += map[sum - target] || 0
   }
   return count
};
console.log(countSubarrays(arr, target));

ผลลัพธ์

4