📅  最后修改于: 2023-12-03 15:36:18.709000             🧑  作者: Mango
给定一个数组arr,计算对数(i, j),其中i < j且arr[i] * j = arr[j] * i。
首先定义两个计数器变量count 和n,其中n表示数组的长度。
遍历数组,对于每一个i,计算arr[i] * j以及arr[j] * i是否相等,如果相等,则计数器count自增1。
具体实现代码如下:
def countPairs(arr: List[int]) -> int:
count = 0
n = len(arr)
for i in range(n):
for j in range(i+1, n):
if arr[i]*j == arr[j]*i:
count += 1
return count
时间复杂度为$O(n^2)$。
assert countPairs([1,2,4,6]) == 2
assert countPairs([1,1,1]) == 3
assert countPairs([5,5,5]) == 3
本题的思路比较简单,主要是找到i和j的关系,然后用嵌套循环遍历数组计算对数即可。但是,需要注意时间复杂度,当数组较大时会出现性能瓶颈。如果需要优化性能,可以考虑使用哈希表等数据结构进行优化。