algorithm - 我们如何在 O(n) 时间和 O(1) 空间复杂度内找到数组中重复的数字

标签 algorithm data-structures

我们如何在 O(n) 时间和 O(1) 复杂度内找到数组中重复的数字? 例如 数组 2,1,4,3,3,10 输出为 3

编辑: 我尝试了以下方式。 我发现如果 no 奇怪地重复,那么我们可以通过执行 xor 来实现结果。所以我想使奇数元素不重复甚至不重复,每个均匀重复不奇数。但为此我需要从 O(n) 中的输入数组中找出唯一的元素数组,但找不到方法。

最佳答案

假设数组中数字的值有一个上限(我用过的所有编程语言中的所有内置整数类型都是这种情况——例如,假设它们是 32 -位整数)有一个解决方案,使用常量空间:

  1. 创建一个包含 N 个元素的数组,其中 N 是输入数组中整数值的上限,并将所有元素初始化为 0false 或某些等效值。我将其称为lookup 数组。
  2. 遍历输入数组,并使用每个数字索引查找数组。如果您找到的值为 1true(等等),则输入数组中的当前数字重复。
  3. 否则,将查找数组中的相应值设置为1true,以记住我们已经看到了这个特定的输入数字。

技术上,这是 O(n) 时间和 O(1) 空间,并且它不会破坏输入数组。实际上,您需要事情按照您的方式进行才能让这样的程序实际运行(例如,如果在输入中谈论 64 位整数是不可能的)。

关于algorithm - 我们如何在 O(n) 时间和 O(1) 空间复杂度内找到数组中重复的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7370978/

相关文章:

algorithm - 对于唯一的整数数组,什么是好的散列函数(或类似函数)?

algorithm - 3x3 Sobel 算子和梯度特征

c - 数据结构基础程序

haskell - Haskell 数据结构建模统计测试的良好设计

algorithm - 如何提高我的算法时间复杂度?

macos - OpenCV - 地球移动器的距离问题,ic​​vInitEMD()

arrays - 如果我们将数组划分为 log(n) 而不是 2,时间复杂度是多少?

java - 是否有像 "Set"这样的对象,它只能包含唯一的字符串值,但也包含对字符串值出现次数的计数?

data-structures - 链表和流在技术上有什么区别?

python - 使用 python 创建分层数据。基于结果列表