Arrays O中未排序数组中的搜索值(日志n)
我的朋友在一次测试中遇到了一个问题,问题是: 您将得到一个未排序的数组,其中整数值成对,1个值为单个,例如:Arrays O中未排序数组中的搜索值(日志n),arrays,algorithm,search,big-o,Arrays,Algorithm,Search,Big O,我的朋友在一次测试中遇到了一个问题,问题是: 您将得到一个未排序的数组,其中整数值成对,1个值为单个,例如: [1,1,5,5,2,2,4,4,7,12,12,8,8] 输出为:7 现在我知道二进制搜索可以用O(logn)完成,但是数组需要排序 那么,在这个未排序的数组上,如何在O(logn)中进行此操作呢?如果单例左侧的所有对都在偶数/奇数索引上,而右侧的对都在奇数/偶数索引上,这就足够了 由于任意元素所属对的奇偶性可以在恒定的时间内找到,因此找到奇偶转换的二分法过程确实是可能的 仅当相邻对
[1,1,5,5,2,2,4,4,7,12,12,8,8]
输出为:7
现在我知道二进制搜索可以用O(logn)完成,但是数组需要排序
那么,在这个未排序的数组上,如何在O(logn)中进行此操作呢?如果单例左侧的所有对都在偶数/奇数索引上,而右侧的对都在奇数/偶数索引上,这就足够了 由于任意元素所属对的奇偶性可以在恒定的时间内找到,因此找到奇偶转换的二分法过程确实是可能的
仅当相邻对不同或相等对的运行长度从未超过长度O(1)时,此选项才有效。例如,对于所有8对中的单个7,只有线性搜索可以执行。如果值对彼此相邻,也可以在未排序的数组中执行二进制搜索:
:- 如果不等于两者,则已找到单个元素
- 否则,将中间元素添加到具有相同元素的零件中(如果它等于第一个零件的最后一个元素,则将其附加到第一个零件,否则将其作为第一个元素添加到第二个零件)
让我们考虑由其他数构成的辅助阵列,如果等于下一个,则分配0,否则为1。
[1,1,5,5,2,2,4,4,7,12,12,8,8]
[0, 0, 0, 0, 1, 1 ]
这个辅助数组被清晰地排序,第一个1可以通过二进制搜索找到
当然,数组不能显式构造,因为这需要O(N)。关闭的原因是荒谬的。值总是成对的吗?@Satpal:检查这个例子。搜索的是任何整数值,还是只搜索没有“另一半”的孤立数字?我知道二进制搜索可以用O(logn)来完成“但是数组需要排序”:恐怕这句话是错误的,对元素进行排序无助于找到单例。@I:我是这么说的,不是吗?万一相邻的成对数相等怎么办?@Yvesdao那么它们将不再是(可定界的)对,而是一组四个。这就是我对这个问题的理解。如果这是允许的呢?@YvesDaoust那么在O(logn)中就不可行了。如果单个值等于相邻对的值,则该算法也不起作用。