我在一次技术面试中被问到以下问题:
如何从未排序的数组中删除重复项?
我想到的一个选项:
- 用数组中每个数字的频率创建一个 HashMap
- 遍历数组并在 HashMap 中执行 O(1) 查找。如果频率 > 0,则从数组中删除数字。
有没有更高效的方法?
另一种选择
- 使用快速排序或归并排序对数组 O(nlog n) 进行排序
- 然后遍历数组并删除重复项
为什么选项 1 比选项 2 好?
我不能使用任何已经完成工作的函数,例如 array_unique。
最佳答案
如果散列映射表示存在重复项,而不是从数组中删除对象,为什么不为散列映射中的每个项目构建一个新数组,并且只在不存在时才将其添加到数组中重复?这个想法是为了省去额外的步骤,即在开始时拥有 2 个具有相同开销的数组。 PHP 在垃圾回收方面表现不佳,因此如果您从一个庞大的数组开始,即使您取消设置它的值,它也可能仍在内存中徘徊。
关于arrays - 如何从未排序的数组中删除重复的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31883266/