为什么我的代码会在hackerrank问题上给出超时错误,而在大量列表输入上却出现超时

时间:2019-02-13 11:34:47

标签: python-3.4

我是一名初学者python编码器(在线自学),我开始在hackerrank解决编码问题,但是我很难弄清楚为什么我的代码会给出超时错误。 我缺少指导,请指导我应该学会什么,以了解如何更快地实现运行代码。

我编码的示例问题-

  

我们在杂志中有词汇表,还需要制作单词表   注意。我们必须检查杂志是否有我们需要的所有字眼   做笔记。如果所有单词都可用,则打印“是”,否则,则打印“否”。

mag = 'ive got a lovely bunch of coconuts'.split()
note = 'ive got some coconuts'.split()
  

我定义了两个功能-

下面的功能给大单词列表超时,我不明白为什么。 此功能只需检查是否每个单词都在杂志中,然后弹出我已经使用过的单词即可。

功能1

def checkMagazine(magazine, note):
    ans = 'Yes'    
    for i in note:        
        if i not in magazine:
            ans = 'No'
            break
        else:            
            magazine.pop(magazine.index(i))
    print(ans)

功能2(运行非常快并通过所有测试(我遵循了某人的代码))

此功能可制作字典,在杂志中循环遍历每个单词并将单词计数存储在字典中。 然后再遍历字典中的单词,与所需单词进行比较,然后给出输出,仍然比直接检查两个列表中的单词更快。

def checkMagazine2(magazine, note):
    ans = 'Yes'
    d = defaultdict(int)
    for word in magazine:        
        d[word]+=1
    for word in note:
        if d[word] == 0:

            ans = 'No'
            break
        else:
            d[word]-=1
    print(ans)

在大多数代码中,我试图解决我面临的超时错误,这些错误在巨大的清单上。我尝试保持编码,在经历了如此多的失败之后,我变得沮丧,并浪费时间在网络游戏上。我真的需要尽快找到工作,请有人指导我。

1 个答案:

答案 0 :(得分:0)

您之所以得到TLE,是因为在lists中查找元素需要花费O(n)的时间。但是第二种解决方案很快,因为它使用了dictionary,并且花费了恒定的时间来查找时间,即O(1)