📅  最后修改于: 2023-12-03 15:40:02.618000             🧑  作者: Mango
在给定的整数数组中,要求统计有多少个三元组(a,b,c),满足a除以b,b除以c的结果为整数。
一种解决方法是暴力枚举,对于每一个三元组(a,b,c),判断是否满足条件,但是这样的时间复杂度为O(n^3),效率较低。
更优秀的解决方法是利用哈希表,先遍历一遍数组将所有元素存入哈希表,对于每一个二元组(b,c),求出它们的商,并在哈希表中查找是否存在可以整除该商的元素a,如果存在则说明存在满足条件的三元组(a,b,c)。
count = 0
for j in range(n):
for k in range(j + 1, n):
if a[k] % a[j] != 0:
continue
target = a[k] / a[j]
if target in hash:
count += hash[target]
hash[a[j]] += 1
输入:[1, 2, 3, 4, 5]
输出:2
解释:满足条件的三元组为(1, 2, 4)和(2, 4, 8)。
通过利用哈希表,可以将时间复杂度优化到O(n^2),并且这种方法适用于元素值大小不均,甚至为负数的情况。在面试中,考察这类题目主要是对于哈希表等数据结构的掌握度和基本算法思路的理解。