713. 乘积小于K的子数组(JavaScript)

给定一个正整数数组 nums

找出该数组内乘积小于 k 的连续的子数组的个数。

示例 1:

输入: nums = [10,5,2,6], k = 100
输出: 8
解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。
需要注意的是 [10,5,2] 并不是乘积小于100的子数组。

说明:

  • 0 < nums.length <= 50000
  • 0 < nums[i] < 1000
  • 0 <= k < 10^6

思路:

参考了别人的双指针,设置两个指针:left和right。

设置起始值origin=1,因为需要将数相乘,所以起始值为1;

设置计数值count=0;

以right为索引来遍历(从0到nums最末尾)。

每次将right上的值乘以起始值,乘积大于等于k时,需要丢弃left上的元素,并将left左移,直到乘积小于k,累加每次加入新元素后子数组的个数(right-left+1)。

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var numSubarrayProductLessThanK = function(nums, k) {
  if (k <= 1) return 0;
  let left = 0,
      origin = 1,
      count = 0;
  for (var right = 0, len = nums.length; right < len; right++) {
    origin = origin * nums[right];
    while (origin >= k) {
      origin /= nums[left];
      left ++;
    }
    count += right - left + 1;
  }
  return count;
};

 

全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
06-28 22:48
已编辑
广东金融学院 Java
小浪_Coding:学院本+这俩项目不是buff叠满了嘛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务