📌  相关文章
📜  给定数组中的对数,其值的乘积等于其索引的总和 (arr[i]*arr[j] = i+j)(1)

📅  最后修改于: 2023-12-03 14:56:54.386000             🧑  作者: Mango

题目介绍

给定一个长度为n的数组,求该数组中所有满足arr[i]*arr[j]=i+j的(i,j)对的个数。

解题思路

遍历数组,对于每一个元素arr[i],遍历它之前的元素arr[j],若满足条件,则计数器加一。

时间复杂度为O(n^2)。

代码实现
def count_pairs(arr):
    n = len(arr)
    count = 0
    for i in range(1, n):
        for j in range(i):
            if arr[i]*arr[j] == i+j:
                count += 1
    return count
测试样例
arr = [2, 3, 4, 6, 7]
assert count_pairs(arr) == 2
总结

这道题暴力求解虽然可以通过,但是时间复杂度较高,需要优化。可以考虑用字典存储i+j和对应的(i,j)对,再用set去重计算有多少个满足条件的(i,j)对。