【发布时间】:2015-07-10 20:01:36
【问题描述】:
给定一个元素数组,其中每个元素都重复,除了单个元素。而且所有重复的元素都是连续的。
我们需要找出那个单一元素的索引。
注意:
数组可能没有排序
预计时间 O(logn)
- 元素范围可以 做任何事。
O(n) 是微不足道的。但我怎样才能弄清楚logn? 也考虑了按位运算符,但没有解决。
另外,我无法在这个问题中使用这个陈述所有重复的元素都是相互连续的。
Ex: 2 2 3 3 9 9 1 1 5 6 6
output 5
【问题讨论】:
-
如果数组没有排序,你不能在 O(n) 之内做到这一点,因为你必须知道每个元素才能给出答案。如果它是排序的,可能有一个可用的快捷方式,但我想不出它。
-
如果数组是排序的,那么我们肯定可以使用二分查找,但是对于未排序的数组,可能是任何其他数据结构都可以做到...任何特定的树 AVL、红黑等。
-
其实我错过了重复元素总是连续的事实。在那种情况下,是否排序并没有区别,但我仍然想不出比 O(n) 更好的解决方案。
-
哦,它们是不是重复了两次?如果每个项目不能超过 2 个,那就很容易了。只需对差异从偶数索引切换到奇数索引的点进行二分搜索。
-
不明白,如何应用二分查找?
标签: c++ algorithm data-structures