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



我是一名python程序员初学者(在线自学),我开始在hackerbank解决编码问题,但我很难弄清楚为什么我的代码会出现超时错误。我缺乏指导,请指导我应该学习什么来理解实现更快的代码。

我编码的示例问题-

我们在杂志上有单词列表,需要制作单词列表笔记我们必须检查一下杂志上是否有我们需要的所有文字记下笔记。如果所有单词都可用,则打印"是";如果不可用,则显示"否"。

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))需要恒定的时间。

最新更新