您将获得两个号码
0<=M<N
和 必须检索按位XOR产品 范围[M,N]中的数字。例子:给出3个数字A,B,C, 按位XOR产品定义为
A bitwiseXOR B bitwiseXOR C
因此产品的位i
是位置i
范围内数字的所有位的XOR结果。
还有一个约束,算法必须在对数时间内工作。
我尝试解决这个问题的方法如下:
num_bits = log(max(M,N));
for(i=0;i<num_bits;i++)
{
lsbM = M&1;
lsbN = N&1;
result |= bitwiseXor(lsbM,lsbN)<<1;
M>>=1;
N>>=1;
}
我没有找到写int bitwiseXor(int lsbM, int lsbN)
的正确规则。
这是不作业,它不是“我需要2个小时内的解决方案,因为我有一个面试”类型的问题。这不过是一个问题,我决定试一试。
修改 例子A = 8,B = 9,C = 10
A: 1000
B: 1001
C: 1010
result 1011
bitwiseXor(lsbM,lsbN)返回结果中位置i的位值