【发布时间】:2015-01-12 18:17:11
【问题描述】:
我们有一个由n 组成的数组,除了一个之外,它们都在这个数组中重复了偶数次;我们想找到重复奇数次的数字。
我认为最佳算法的时间复杂度比O( n Log(n) ) 好,因为我们可以对数组进行排序然后迭代它,当我们看到一个新数字时,我们增加一个累加器,当我们再次看到它时,我们减少累加器并在累加器不为零的每个成员的末尾都重复了奇数次。
另外我认为它没有比O(n) 更好的算法,因为如果有,那么它必须是O( Log(n) ),为此我们需要一个排序数组,但我们的初始数组不是。
【问题讨论】:
-
数字是整数吗? (这很重要。)
-
你可以在
O(n)中解决这个问题,如果你可以使用O(n)空间:创建一个字典,将数字值映射到一个计数。 -
顺便说一句,您认为算法不能比
O(n)更好的推理是有缺陷的(尽管结论是正确的)。 -
另外,请澄清“重复”是否意味着它们出现在数组中的连续运行中,或者如果您只想计算数组中的出现次数而不考虑它们的邻居。
-
@Dai 使用哈希表(又名字典)导致
O(n)最佳/平均情况,但O(n^2)最坏情况。
标签: algorithm time-complexity greedy