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

ผลคูณซับอาร์เรย์ที่น้อยกว่า Target ใน JavaScript


ปัญหา

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

ฟังก์ชันควรนับและคืนจำนวนซับอาร์เรย์ (ติดกัน) ที่ผลคูณของสมาชิกทั้งหมดในซับอาร์เรย์น้อยกว่า target

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

Input

const arr = [10, 5, 2, 6]; 
const target = 100;

Output

const output = 8;

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

ซับอาร์เรย์ 8 ชุดที่ผลคูณน้อยกว่า 100 คือ:

[10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6].

สังเกตว่า [10, 5, 2] ไม่รวม เพราะผลคูณ 100 ไม่น้อยกว่า target อย่างเคร่งครัด

ตัวอย่าง

โค้ดด้านล่างนี้

const arr = [10, 5, 2, 6]; 
const target = 100; 
const countSubarrays = (arr = [], target = 1) => {
  let product = 1;
  let left = 0;
  let count = 0;
  for (let right = 0; right < arr.length; right++) {
    product *= arr[right];
    while (left <= right && product >= target) {
      product /= arr[left];
      left += 1;
    }
    count += right - left + 1;
  }
  return count;
};
console.log(countSubarrays(arr, target));

ผลลัพธ์

8