【发布时间】:2011-05-22 16:38:35
【问题描述】:
我有一个可能包含重复元素的数组(一个元素的两个以上重复)。我想知道是否可以找到并删除数组中的重复项:
- 不使用哈希表(严格要求)
- 不使用临时辅助阵列。对复杂性没有限制。
P.S:这不是家庭作业问题
在雅虎技术面试中被问到我的朋友
【问题讨论】:
-
尽管“对复杂性没有限制”,但我不会亲自雇用任何对此做出
O(n^2)回复的人:P -
@Billy:我认为候选人的正确态度是解释权衡:就地排序破坏了原始顺序但满足了直接的功能需求,而 O(N^2)对于较大的 N,可以预期会变慢,但可以保持顺序。从绝对意义上讲,这两个答案都不一定更好,至少当问题特意说对复杂性没有限制时。
-
@Tony:如果您需要保持顺序,您可以随时按元素的原始位置重新排序目标数组,同时仍然避免二次复杂性。
-
@Billy:你可以吗?你怎么知道他们原来的位置?您不允许使用临时辅助阵列来记录它们。它们的顺序可能与它们内部的任何数据无关,甚至可能由程序中其他地方的数据隐含。
-
@Tony:为什么不呢? :P (我知道面试题说源码不能复制,但面试题并没有加顺序要求)在现实世界的程序中,最好花小空间开销,节省二次复杂度。
标签: arrays algorithm duplicates