JavaScript 中子数组的乘积略小于目标

问题

我们需要编写一个 JavaScript 函数,它接受一个数字数组 arr 作为第一个参数,一个数字 target 作为第二个参数。

我们的函数应该计算并返回(连续)子数组的数量,其中子数组中所有元素的乘积小于目标。

例如,如果函数的输入是

输入

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

输出

const output = 8;

输出说明

乘积小于 100 的 8 个子数组是 -

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

请注意,[10, 5, 2] 不包括在内,因为 100 的乘积不严格小于 k。

示例

以下是代码 -

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