假设我有一个整数元素数组,这里我想删除所有重复的元素,并使用任何Java.util类打印剩余的元素。我使用2个指针扫描并删除所有重复但是需要O(N ^ 2)来解决它。我只想知道是否有任何算法可以在O(N)中完成这项任务?
示例:
Input Array: [1, 2, 3, 4, 5, 4, 3, 4, 6]
Expected Array: [1, 2, 5, 6]
答案 0 :(得分:3)
您可以使用存储桶来实现O(N)+ C(使用巨大的C)但是以存储为代价
bucket []数组可以用更好的数据结构替换。但它仍然达到了O(N)
答案 1 :(得分:1)
我会使用Set。
for each item:
if item is in the Set
ignore it
else
copy it somewhere or output it or whatever
add it to the Set
那应该适合你。
使用HashSet
似乎对add
和contains
(Time complexity of set in Java)具有O(1)复杂度
答案 2 :(得分:0)
您可以使用任何算法对所有元素进行排序,例如合并排序,快速排序,复杂度为n lg n。 然后使用堆栈向其中添加元素。继续将元素推送到堆栈,直到找到重复。如果从stack.it弹出重复元素将删除重复元素。 总复杂度为O(n lg n)。这可能是解决问题的有效方法。