在O(n log n)时间内从列表中删除重复的元素

时间:2014-11-25 10:48:53

标签: python algorithm list

我需要一个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))算法,并且之前没有说明对列表进行排序。

2 个答案:

答案 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()

你可以试试这个。