【发布时间】:2016-03-11 06:29:35
【问题描述】:
这是一个理解分治算法的练习题。
给定一个由 N 个排序整数组成的数组。所有元素都是不同的,除了一个 元素重复两次。设计一个 O (log N) 算法来找到该元素。
我知道该数组需要被划分,看看是否在下一个索引中找到了相等的对应物,我相信这是二进制搜索的一些变体。但我找不到任何解决方案或指导。
【问题讨论】:
-
这些是连续整数吗?
-
没有。这是问题的确切文本,它没有提到连续的整数。
-
当不是连续的数字时,我认为没有logN解决方案。
-
要实现 log(N),您需要一些标准来在每次迭代时丢弃一半数组。对于随机(尽管已排序)整数,没有这样的标准,您最终需要检查所有元素,这使得最坏的情况为 O(N)。可能问题的作者正在考虑一个由 1..N-1 个元素组成的数组(即连续的)。
-
这似乎与连续数字问题太相似了,可能是因为错误而遗漏了,因为如果不是 - 那么连续排序数组问题具有冗余信息,它不会:)
标签: algorithm binary-search divide-and-conquer