python - 比较列表交集的算法

标签 python algorithm

我正在尝试设计一种算法来查找已排序数组和不同数组之间的共同元素。我正在使用以下两种方法之一。就运行时和时间复杂度而言,哪一个更好?

方法一:

# O(n^2) ?
common = []

def intersect(array1,array2):
    dict1 = {}
    for item in array1:
        dict1.update({item:0})
    for k,v in dict1.iteritems():
        if k in array2:
             common.append(k)          
    return common

print intersect(array1=[1,2,3,5], array2 = [5,6,7,8,9])

方法二:

# probably O(n^2)
    common = []

def intersect(array1,array2):
    for item1 in array1:
        for item2 in array2:
            if (item1==item2): 
                common.append(item1)
    return common

print intersect(array1=[1,2,3,5], array2 = [5,6,7,8,9])

最佳答案

array1M 个元素,array2N 个元素。第一种方法的时间复杂度 O(M lg N)。第二种方法的时间复杂度为 O(M*N)。因此,从时间复杂度的角度来看,第一个更好。但是请注意,第一种方法的空间复杂度为 O(M),而第二种方法则没有。

顺便说一句,可能有一个O(max(M, N))算法。

关于python - 比较列表交集的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44093047/

相关文章:

python - 属性错误 : 'str' object has no attribute 'strftime' when modifying pandas dataframe

python - Pandas:基于附加条件的每个类别的 cumsum

php - 填充数组php的算法

无替换采样算法?

algorithm - 连通分量计数算法的运行时间

python - Django 过滤器根据多个条件在 order_by 之后返回重复项

javascript - python Selenium : Remove certain characters from web page body

python - Jupyter 无法在主目录之外启动

algorithm - 精神错乱还是什么?

algorithm - 在字典中查找作为给定字符串子序列的最长单词(Google TechDevGuide)