arrays - 如何从未排序的数组中删除重复的数字

标签 arrays algorithm hashmap big-o

我在一次技术面试中被问到以下问题:

如何从未排序的数组中删除重复项?

我想到的一个选项:

  1. 用数组中每个数字的频率创建一个 HashMap
  2. 遍历数组并在 HashMap 中执行 O(1) 查找。如果频率 > 0,则从数组中删除数字。

有没有更高效的方法?

另一种选择

  1. 使用快速排序或归并排序对数组 O(nlog n) 进行排序
  2. 然后遍历数组并删除重复项

为什么选项 1 比选项 2 好?

我不能使用任何已经完成工作的函数,例如 array_unique。

最佳答案

如果散列映射表示存在重复项,而不是从数组中删除对象,为什么不为散列映射中的每个项目构建一个新数组,并且只在不存在时才将其添加到数组中重复?这个想法是为了省去额外的步骤,即在开始时拥有 2 个具有相同开销的数组。 PHP 在垃圾回收方面表现不佳,因此如果您从一个庞大的数组开始,即使您取消设置它的值,它也可能仍在内存中徘徊。

关于arrays - 如何从未排序的数组中删除重复的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31883266/

相关文章:

arrays - 如何在 Matlab 中使用元胞数组?

php - array_search 没有找到所有的值

algorithm - 在矩阵中找到最大和 sub=rectangle

c++ - 适用于矩阵稀疏模式的哈希函数

java - 提取子字符串以用于简单日期格式

Java效率Hashmap get方法

python - 比较数组时节省内存的 np.newaxis() 替代方案

arrays - SwiftUI 复选标记单行

algorithm - 生成括号问题的闭包数法

c - 动态数组自动收缩