【发布时间】:2011-04-27 04:16:34
【问题描述】:
我在面试时被问到的问题。我接近解决方案,但不幸的是没有解决它。
假设我们有一个序列,其中包含 N 个 long 类型的数字。我们确定在这个序列中,每个数字都恰好出现 n 次,除了一个数字恰好出现 m 次(0 m n)。我们如何通过 O(N) 操作和 O(1) 额外内存找到该数字?
对于最简单的情况(当 n = 2 和 m = 1) 我们应该做的只是对序列中的每个数字执行累积xor。结果将等于所需的数字。但是我在尝试处理任意 m 和 n 时遇到了困难。
我希望有一个实际的 C++ 解决方案。
编辑:我们先验地知道 m 和 n 的实际值。
示例。 我们知道 n = 3 和 m = 2 . 序列 (N = 8) 是
5 11 5 2 11 5 2 11
在这种特殊情况下,正确的答案是 2,因为它只出现了两次。
【问题讨论】:
-
我只想说这是一个糟糕的面试问题。
-
你能定义一个像long域大小的数组这样的奇幻结构吗?其中大多数是可代表的。
-
那么也许这个通常不好的问题适合你的情况。
-
哇,我通常采访的程序员都很难解决 Fizzbuz 测试。真的有人可以解决这样的问题,当他们很紧张并且几个面试官正在看着他们/在他们的脖子上呼吸时?在哪里可以找到这些人?
-
面试是一门艰苦的学科,一方面你想围绕候选人的水平提出问题,另一方面你也想让优秀的候选人发光。这些人显然选择了一些最困难的东西,而且在这之上给的时间太少了。无论如何,带上它,这比人们问如何用 jQuery 完成一些简单的任务要有趣得多。