我是一个初学的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)
在大多数代码我尝试解决我面临巨大的列表上的超时错误。我试图继续编码,经过这么多的失败后,我感到失去动力,浪费我的时间在网络游戏上。我真的需要尽快找到工作,请有人指导我。
你正在获得TLE
,因为查找lists
中的元素需要O(n)
时间。但第二个解决方案是快速的,因为它使用dictionary
,它需要恒定的时间来查找时间,即O(1)
。