📅  最后修改于: 2023-12-03 15:13:29.435000             🧑  作者: Mango
给定一个非空整数数组,计算其中满足 a 除以 b 且 b 除以 c 的三元组 (a, b, c) 的个数。
Input: nums = [1,2,3,4,5]
Output: 2
Explanation: 有两个满足条件的三元组:(1,2,4) 和 (1,3,5)。
对于一个给定的三元组 (a, b, c),如果 a 除以 b 且 b 除以 c 为真,那么有以下几个性质:
因此,我们可以枚举 b,然后统计能够满足条件的 a 和 c 的出现次数。
具体来说,我们可以使用两个数组 count1 和 count2 分别记录当前所有 b 的倍数和当前所有 c 的因数的出现次数。答案即为将 count1 和 count2 进行乘法统计后的累加和。
Python 代码实现如下:
def count_good_triplets(nums: List[int], a: int, b: int, c: int) -> int:
n = len(nums)
count1, count2 = [0] * 1010, [0] * 1010
for j in range(0, n):
for k in range(j + 1, n):
if nums[k] % b == 0:
i = nums[k] // b
if i <= a and j - i >= 0:
count1[i * 101 + j - i] += 1
if nums[j] % b == 0:
i = nums[j] // b
if i <= a and k - i >= 0:
count2[i * 101 + k - i] += 1
ans = 0
for i in range(1, n):
for j in range(i):
if nums[i] % c == 0 and nums[j] * b == nums[i]:
ans += count1[nums[j] * 101 + j] * count2[nums[i] // b * 101 + i]
return ans