【发布时间】:2012-09-04 12:59:31
【问题描述】:
有谁知道在数字序列列表中查找重复项的比线性算法更快的算法吗?我现在正在使用 Java,但任何语言或伪代码都可以。
例如,给定这个 int[] 输入:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 7 | 8 | 9
输出将是索引或值“7”。
我知道O(n) 线性时间的明显遍历,但我试图通过O(log n) 时间的二进制搜索来查看这是否可能。
【问题讨论】:
-
什么是明显的线性时间?您是否假设列表已排序?
-
你只有一个重复值?
-
听起来像是一个面试问题;)
-
如果列表是连续的,它是排序的。显而易见的方法是遍历列表并将列表 [n] 与列表 [n+1] 进行比较,这最多需要 O(n) 次比较。
-
不确定您所说的顺序是什么意思...如果您的意思是增加 1,请参阅 Peter 的回答(只需查找您看到的索引比您预期的更高的数字)。
标签: java algorithm binary-search