Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

อาร์เรย์ย่อยฐานสองที่มีผลรวมตามเป้าหมายใน JavaScript

ปัญหา

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

ฟังก์ชันควรนับจำนวนอาร์เรย์ย่อยที่มีอยู่ในอาร์เรย์ arr ซึ่งผลรวมขององค์ประกอบเท่ากับ target และคืนค่าจำนวนนี้

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

อินพุต

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