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

问题描述 投票:0回答:1

我是一个初学的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)

在大多数代码我尝试解决我面临巨大的列表上的超时错误。我试图继续编码,经过这么多的失败后,我感到失去动力,浪费我的时间在网络游戏上。我真的需要尽快找到工作,请有人指导我。

python-3.4
1个回答
0
投票

你正在获得TLE,因为查找lists中的元素需要O(n)时间。但第二个解决方案是快速的,因为它使用dictionary,它需要恒定的时间来查找时间,即O(1)

© www.soinside.com 2019 - 2024. All rights reserved.