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

Algorithm 给定范围内所有可能对的最大位和,algorithm,bit-manipulation,Algorithm,Bit Manipulation,给定一个范围[l,r]查找所有可能存在的对的最大位和 我应该采取什么方法来有效地解决它?下面是一个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) ret

给定一个范围
[l,r]
查找所有可能存在的对的最大位和


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

下面是一个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。所以这个结果将是end-1,很明显,没有比这更高的了


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

l和r都是二进制的吗?是的,它们可以用二进制数表示。提示:类似0xfffe后跟0xffff的序列可能是候选序列。是否有时间复杂度要求?我认为您的代码和描述不匹配。在代码中,如果
end
为偶数,则返回
(end-1)和(end-2)
。但是您的描述说,当
end
为偶数时,最大值是
end&(end-1)
。描述不正确,因为给定start=0和end=8,
8&7
返回0。@JimMischel我总是混淆奇数和偶数,谢谢通知。现在就应该解决了。你愿意分享你处理这些问题的想法吗?或者,你学过二进制算术吗?@ArdentCoder不能说我记得这个案例,要么是我用谷歌搜索了这个解决方案/一个类似的解决方案,要么是我自己想出的。我没有做过这方面的课程,只是参加过很多竞争性的编程比赛。