📌  相关文章
📜  所有相邻元素都被一个相邻元素相除的数组的计数(1)

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