我在hackerrank中提交的大多数解决方案都会抛出超时错误, 所以我试图在我的电脑中找到sublime text 3中的一个代码的执行时间,并导致[完成220.5秒]输入200万输入。
问题陈述: https://www.hackerrank.com/challenges/py-the-captains-room/problem
我的解决方案:
n=int(input())
l_list=list(map(int,(input().split())))
l_set=set(l_list)
for i in l_set:
c=l_list.count(i)
if c==1:
print(i)
请帮我优化代码或者我的系统太慢???
答案 0 :(得分:0)
你的循环是O(n ^ 2),因为list.count
是O(n)。创建集合也是可以跳过的O(n)操作。
你应该考虑尝试通过你的阵列一次并完成所有计数。现在你要浏览集合中的所有项目,并且对于每个项目l_list.count(i)
一次通过列表,这会给你带来可怕的O(n ^ 2)性能。
我不想直接给你答案,因为这项任务是作为一种学习经历......
答案 1 :(得分:0)
我在下面的代码中遇到了同样的问题。
k=int(input())
a_list=list(input().split())
a_set=set(a_list)
for each in a_set:
if(a_list.count(each)!=k):
print(each)
诀窍是使用集合中的计数器。请参考下面的讨论 How to count the occurrences of a list item?