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

更新于: 24-4 月-2021

123 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始
广告