1. 程式人生 > 其它 >[leetcode] 713. Subarray Product Less Than K

[leetcode] 713. Subarray Product Less Than K

題目

Given an array of integers nums and an integer k, return the number of contiguous subarrays where the product of all the elements in the subarray is strictly less than k.

Example 1:

Input: nums = [10,5,2,6], k = 100
Output: 8
Explanation: The 8 subarrays that have product less than 100 are:
[10], [5], [2], [6], [10, 5], [5, 2], [2, 6], [5, 2, 6]
Note that [10, 5, 2] is not included as the product of 100 is not strictly less than k.

Example 2:

Input: nums = [1,2,3], k = 0
Output: 0

Constraints:

  • 1 <= nums.length <= 3 * 10^4
  • 1 <= nums[i] <= 1000
  • 0 <= k <= 10^6

思路

雙指標,左右指標框起來的數字需要保持積小於k,並在遍歷nums的過程中不斷地記錄數量。

程式碼

python版本:

class Solution:
    def numSubarrayProductLessThanK(self, nums: List[int], k: int) -> int:
        cnt, prod, l = 0, 1, 0
        for r in range(len(nums)):
            prod *= nums[r]
            while prod >= k and l <= r:
                prod /= nums[l]
                l += 1
            cnt += r-l+1
        return cnt