Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một mảng số arr làm đối số thứ nhất và một số target làm đối số thứ hai.
Hàm phải đếm và trả về số lượng mảng con (liên tiếp) mà tích của tất cả các phần tử trong mảng con nhỏ hơn target.
Ví dụ, nếu đầu vào của hàm là:
Đầu vào
const arr = [10, 5, 2, 6]; const target = 100;
Đầu ra
const output = 8;
Giải thích đầu ra
8 mảng con có tích nhỏ hơn 100 là:
[10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6].
Lưu ý [10, 5, 2] không được tính vì tích bằng 100 không nhỏ hơn chặt k.
Ví dụ
Dưới đây là mã:
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));Đầu ra
8