📌  相关文章
📜  找出乘积小于或等于 K 的所有可能子数组(1)

📅  最后修改于: 2023-12-03 15:39:44.877000             🧑  作者: Mango

题目介绍

给定一个正整数数组和一个整数 k,找出乘积小于或等于 k 的所有可能子数组。

解题思路

首先,我们可以使用滑动窗口来解决这个问题。我们使用两个指针,分别表示窗口的左端和右端,用r来表示右端,l来表示左端。开始时,r和l都指向数组的开头,然后我们将右端向右移动,直到数组中对应子数组的乘积不小于k,此时我们记录下对应的子数组,并将左端向右移动,缩小窗口的大小,直到对应子数组的乘积小于k。

在这个过程中,我们需要记录下每个符合要求的子数组,并在最后返回。

代码实现

def findSubarrays(nums, k):
    res = []
    n = len(nums)
    left, prod = 0, 1
    for right in range(n):
        prod *= nums[right]
        while prod >= k and left <= right:
            prod /= nums[left]
            left += 1
        if prod < k:
            res += nums[left:right + 1],
    return res

复杂度分析

本算法的时间复杂度为 O(n),其中n是数组长度。空间复杂度为 O(1)。