【发布时间】:2012-02-10 20:59:08
【问题描述】:
如果您有足够的内存可以使用,那么在 O(1) 中计算数字的二进制表示中 1 的数量的有效方法。这是我在一个在线论坛上找到的一个面试问题,但没有答案。有人可以提出一些建议吗,我想不出在 O(1) 时间内完成的方法?
【问题讨论】:
-
所以这个问题要你作弊——“足够”的内存很容易比可观察宇宙中的原子多。
-
不就是一个MAX_INT长度的数组吗?
-
请纠正我 - 如果我们有一个数组 [0..MAX_INT-1] ,其中索引是输入的实际数字,数据是该数字的 1 的数量(假设它是通过内容寻址内存实现的 en.wikipedia.org/wiki/Content-addressable_memory) 不是 O(1) 吗?
-
这可能是模型面试解决方案,虽然我不认为它会满足 purist 因为它受到机器上可寻址内存的数据宽度的限制(比如 64 位)。它不适用于> 2^64 的数字,并且如前所述,该问题并未施加此限制。如果问题被修改为“64 位数字”,那么是的,这是一个很好的解决方案。
-
另一方面,对于 64 位数字,旧的位计数方法也是 O(1) 并且几乎不使用内存。