查找数组中的对数(a,b),以使%b = 0

时间:2019-12-08 09:07:21

标签: arrays greatest-common-divisor

我正在O(N ^ 2)中得到解决方案 这是我的解决方案:

arr = [4,6,5,5,7,7,8]

count = 0

for i in range(n):

    for j in range(n):
        if (i!=j and arr[i]%arr[j]==0):
            count = count + 1
return count

1 个答案:

答案 0 :(得分:0)

您必须对照另一个项目检查每个项目,因此常规代码将为O(n ^ 2)。

了解问题的结构,也许可以使它更有效。

例如,如果您有重复的值,则可以先创建一个唯一列表:这可以具有复杂度O(n)。

也许还值得对列表进行排序,以便仅将较大的数字除以较小的数字,但排序的结果是O(n ^ 2)最差的是平均O(n log n)。

根据数字范围,您也许可以使用巧妙的数学属性来排除搜索的大部分内容(如果数据已排序)