如何计算这段代码的时间复杂度?

时间:2019-11-18 14:00:00

标签: python time-complexity

我正在遇到HackerRank问题,并且我有这个问题:

  

给出嵌入在约翰的每块岩石中的矿物清单,显示   他的收藏夹中有多少种宝石。例如,   矿物成分字符串的数组是['abc','abc','bc]。的   矿物b和c出现在每个复合物中,因此有2个宝石。

我有一个解决方案,但是我想问一下时间复杂度:

def gemstones(arr):
    counter = 0
    char_set = set(''.join(arr))
    for ch in char_set:
        if all(ch in word for word in arr):
            counter+=1
    return counter

我是否正确地认为时间复杂度为O(n + m),其中n是char_set中的元素数,m是arr中的元素数?

1 个答案:

答案 0 :(得分:0)

正确的复杂度是O(N):

def gemstones(arr) :
    return len(set(arr))

这将返回正确数量的宝石,而忽略重复的宝石。

您不必为此计算矿物质。


下面是HR问题的链接,针对该问题的解决方案是:

def gemstones(arr):
    x = set(arr[0])
    for a in arr :
        x.intersection_update(set(a))
    return len(x)