在给定范围内的最大按位和所有可能的对

时间:2018-06-26 06:01:34

标签: algorithm bit-manipulation

  

给定一个范围[l,r],找到所有可能的对中的最大按位and

我应该采取什么方法才能有效地解决它?

1 个答案:

答案 0 :(得分:0)

这是一个JavaScript实现:

function maxAndInRange2(start, end) {
    if (end - start == 0) return 0;
    if (end - start == 1) return end & start;

    if (end % 2 == 0) return (end - 1) & (end - 2)
    return end & (end - 1)
}

如果end为奇数,则答案必须为end&(end-1),因为end-1将具有除最后一位外所有相同的二进制数字,后者将变为0。因此,此结果将结束-1,显然没有其他对可以高于此。

如果end是偶数,则(end-1)是奇数。按照相同的逻辑,(end-1)&(end-2)将给我们(end-2)。可以有比这更高的一对吗?只有end-1可以更高,但是end&(end-1)在这种情况下不会给我们end-1,所以(end-2)是最高结果