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

หาจำนวนซับอาร์เรย์ที่ผลรวมหาร num ลงตัวใน JavaScript


ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์แรก และตัวเลข num เป็นอาร์กิวเมนต์ที่สอง ฟังก์ชันควรคืนจำนวนของซับอาร์เรย์ (ติดกัน, ไม่ว่าง) ที่มีผลรวมหาร num ลงตัว

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

const arr = [4, 5, 0, -2, -3, 1]; 
const num = 5;

ผลลัพธ์ควรเป็น

const output = 7;

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

มีซับอาร์เรย์ 7 ชุดที่ผลรวมหาร 5 ลงตัว:

[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

ตัวอย่างโค้ด

const arr = [4, 5, 0, -2, -3, 1]; 
const num = 5; 
const divisibleSum = (arr = [], num = 1) => {
  const map = {};
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    sum += arr[i];
    const key = ((sum % num) + num) % num;
    map[key] = map[key]+1||1;
  }
  let s = 0;
  for (let i = 0; i < num; i++) {
    if (map[i] > 1) {
      s += (map[i] * (map[i] - 1)) / 2;
    }
  }
  return s + (map[0]||0);
};
console.log(divisibleSum(arr, num));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น

7