📅  最后修改于: 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)。