【问题标题】:Find first unique number in an unsorted array在未排序的数组中查找第一个唯一数字
【发布时间】:2017-10-22 13:09:29
【问题描述】:

我在处理之前的面试问题时遇到了这个问题。有什么方法可以解决这个问题吗?

在未排序的 32 位数字数组中查找第一个唯一数字 不使用哈希表或计数器数组。

【问题讨论】:

  • 我们可以对数据进行排序吗?
  • @ThomasJungblut 如果一个数字有三个副本,或者有多个唯一数字,则此方法不起作用。
  • @ThomasJungblut 但是问题中没有做出这个假设。你不能只添加假设。
  • @ThomasJungblut 这是一个不同的问题,它恰好相似但不相同。这个问题询问“第一个唯一数字”这一事实意味着可能有多个。

标签: algorithm


【解决方案1】:

看到输入数组是未排序的,可以通过排序解决问题。这有点傻 - 为什么要在问题本身中回答问题? - 但是排序的技术细节有点有趣,所以也许这个答案毕竟不是微不足道的。

排序后查看数组时,会发现有几个数不等于其前任和后继;从这些中,您要选择原始数组中的第一个。

为了有效地做到这一点,在您正在排序的临时数组中,对于每个数字,还要将该数字的索引存储在原始数组中。因此,最后选择不等于其前任和后继的数字,并且在原始数组中具有最低的索引。

【讨论】:

    【解决方案2】:

    当你不得不“不使用 Y 做 X”时,你有时可以使用 Z,它与 Y 具有相同的效果,并争辩说你没有使用 Y。或者你可以很好地伪装 Y,这样没人会认出你一见钟情。

    考虑到这一点,考虑将所有数字的重复计数器存储在 trie 中。要从所有唯一数字的集合中选择第一个数字,请将索引与重复计数器一起存储。

    我可以声称 trie 不是重复计数器数组,因为您不必为数组分配和初始化 232 个内存单元。这更像是一个美化的哈希表,但看起来已经足够不同了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 2012-07-08
      相关资源
      最近更新 更多