【问题标题】:Find duplicate element in an array in O(log n) time在 O(log n) 时间内找到数组中的重复元素
【发布时间】:2012-06-13 14:21:30
【问题描述】:

我知道类似的问题可能会被问很多次,但又有所不同。

给定一个未排序的整数数组,其值为1 to N-1,其中有一个重复元素(N 是数组的大小,最大值为N-1,因为存在重复元素)。找到重复元素的最佳方法是什么?如果可能的话O(log n).`

我知道O(n) 的解决方案,但是有什么办法可以在O(log n) 时间内解决这个问题吗?

O(n) 解:

1) Find sum of first N-1 natural numbers using N(N-1)/2, lets say it SUM1
2) Find sum of all the elements of the arrays, let say it SUM2

Duplicate = SUM2 - SUM1

【问题讨论】:

    标签: arrays algorithm


    【解决方案1】:

    它不能亚线性完成,数组是未排序的,所以你需要在最坏的情况下读取所有元素。

    这种直觉非常通用,适用于许多处理未排序数组的算法,因为您的 dupe 元素可能正在等待“超出界限”。

    当然,同样的直觉不适用于排序数组的问题。

    【讨论】:

      【解决方案2】:

      它不能在亚线性时间内完成。输入没有这样的属性(如排序数组)让您在 log(N) 时间内完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-28
        • 2013-02-03
        • 1970-01-01
        • 1970-01-01
        • 2017-01-26
        • 2012-04-16
        • 2020-01-22
        • 2011-11-28
        相关资源
        最近更新 更多