小编tan*_*ion的帖子

面试问题:对于数组中的每个数字,找出它与任何其他数字的最大位差

我最近遇到这个问题,不知道如何解决。n1我得到了一个小于一百万的正整数数组,对于每个数字,我必须计算它与数组中任何其他数字的最大位差,其中和之间的位差n2被定义为设置位的数量在n1 xor n2。例如,输入

3 (011)
5 (101)
4 (100)
Run Code Online (Sandbox Code Playgroud)

应该输出数组

3 (3 ^ 4 = 7, which has 3 set bits)
2 (5 ^ 3 = 6, which has 2 set bits)
3 (4 ^ 3 = 7, which has 3 set bits)
Run Code Online (Sandbox Code Playgroud)

其中输出数组中的每个数字对应于包含输入数组中具有相同索引的输入的所有对的最大位差(因此,例如,用于第一个索引处的输出的对必须包括 3,因为 3 是输入数组中的第一个数字。)数组的大小可能非常大,因此我认为每对的 O(N^2) 解决方案太慢了。我怀疑该解决方案与利用数字必须小于 100 万这一事实有关,因为这意味着每个数字只有 20 位。然而,我无法继续这个想法。

arrays algorithm bit-manipulation

5
推荐指数
1
解决办法
133
查看次数

标签 统计

algorithm ×1

arrays ×1

bit-manipulation ×1