我需要一个O(n log n)算法来从列表中删除重复的元素。我知道我可以使用一个集合,但是我需要一个具有这种特定复杂性的算法,我不知道如何编写它。因为我现在有这个代码,但我不知道它的复杂程度,虽然我认为它不是n log n。
def removing(a):
for e in a:
if e in a[a.index(e)+1:]:
a.remove(e)
return a
练习说它想要一个 O(n * log(n))算法,并且之前没有说明对列表进行排序。
答案 0 :(得分:0)
由于这是一项任务,我只是暗示你 - 你可以使用集合解决方案,并使用OrderedDict代替常规集合({1}}具有O(nlogn)
最差情况下的性能键无关紧要,您可以将它们全部映射到None
或其他任意值
如果结果列表中元素的顺序无关紧要,那么最简单的解决方案就是排序,然后迭代,并排除a[i] == a[i+1]
之类的元素。结果将是一个包含所有唯一元素的排序列表,并在O(nlogn)
祝你好运。
答案 1 :(得分:-1)
x=[1,2,3,4,6,6,2,3,1]
dic={}
for i in x:
dic[i]=0
print dic.keys()
你可以试试这个。