leetcode 713.乘积小于K的子数组

给定一个正整数数组 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

 

双指针法  涉及到连续子数组问题,双指针滑窗法!

class Solution(object):
    def numSubarrayProductLessThanK(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
#         双指针法 计算i,j之间的满足条件的连续子数组个数
        if k==0 or k==1:return 0
        n,i=0,0
        mul=1
        for j in range(len(nums)):
            mul*=nums[j]
            while mul>=k:
                mul//=nums[i]
                i+=1
#             加入当前元素后增加的乘积为k的连续子数组个数为j-i+1
            n+=j-i+1
        return n

 

你可能感兴趣的:(leetcode,双指针)