📅  最后修改于: 2023-12-03 15:09:59.987000             🧑  作者: Mango
给定一个整数数组 nums,计算满足以下条件的非空连续子数组的个数:
所有相邻元素都被一个相邻元素相除,即 nums[i] / nums[i + 1] = k,其中 k 是整数
对于每个数nums[i],检查他与之后的数nums[j]的关系,是否符合相邻元素相除的条件,即nums[i]/nums[j]=k。如果符合,则继续检查是否符合i到j之间的所有数都符合条件,并更新结果count。
为了避免重复计算,我们可以用一个哈希表来存储每个值及其出现次数,然后在循环中判断是否有符合条件的数。
def countSubArray(nums):
res = 0
n = len(nums)
for i in range(n):
count = {}
for j in range(i, n):
if j == i:
continue
if nums[j] == 0:
if nums[i] == 0:
res += 1
continue
if nums[i] == 0:
break
if nums[j] % nums[i] == 0:
k = nums[j] // nums[i]
if k not in count:
count[k] = 1
else:
count[k] += 1
res += count[k]
else:
break
return res
assert countSubArray([1,2,3,4]) == 4
assert countSubArray([1,2,4,8]) == 6
assert countSubArray([3,3,3,4]) == 5
时间复杂度:$O(n^2)$
空间复杂度:$O(n)$