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