📌  相关文章
📜  从数组中计算对 (i, j) 的数量,使得 arr[i] * j = arr[j] * i(1)

📅  最后修改于: 2023-12-03 15:36:18.709000             🧑  作者: Mango

从数组中计算对 (i, j) 的数量

给定一个数组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的关系,然后用嵌套循环遍历数组计算对数即可。但是,需要注意时间复杂度,当数组较大时会出现性能瓶颈。如果需要优化性能,可以考虑使用哈希表等数据结构进行优化。