数组中元素重复的时间复杂度

时间:2013-10-11 23:25:37

标签: algorithm asymptotic-complexity

给定一个n个随机数的数组,找到一个O(n * ln n)算法来检查它是否只包含数组的重复出现(没有其他复杂的数据结构)。

当你拿走每个元素并与其余元素进行比较以检查匹配时,我得到了明显的O(N * N)。您也可以对它进行排序并比较n * log n中的相邻元素。我正在寻找除此之外的东西。

2 个答案:

答案 0 :(得分:3)

好的,让我对此有所了解。

  1. 找到数组中最大的元素(比如max)。 (O(N)操作)
  2. 创建大小为boolean的{​​{1}}数组(例如temp)。
  3. 遍历原始数组,并使用max index作为temp数组,并检查它是否为true,即if (temp[current_value] == true)
  4. 如果是true,您发现重复元素设置为temp[current_value] = true
  5. 显然这个算法不是空间效率,因为我们不知道temp数组的大小是多少,并且临时数组中的大多数空格永远不会被访问但是时间复杂度是O(N)

答案 1 :(得分:1)

最好用哈希表替换数组。然后,不需要找到min / max,只需将你的数字作为kyes开始在哈希表中,在每次“put”之前检查该键是否已经存在。请注意,数组方法无法处理大范围内的数字,例如min = -2 ^ 63,max = 2 ^ 63,即使只有少数数字。另一方面,哈希表可以轻松处理它们。

但是,我只是注意到你只想使用数组。然后,您可以使用该数组模拟哈希表。详情请见:http://algs4.cs.princeton.edu/34hash/ 您可以选择简单的哈希函数并以一种简单的方式处理冲突,例如将冲突的值放入下一个可用的数组槽中。