如果我有一个正整数的列表L
,并且我有另一个号码K
,我需要在列表中找到K
的XOR最大值。< / p>
我想到了一个算法。我想用反驳论证验证它的正确性。我的算法是:
P
= K的补码(1的补码)。现在找到列表L中最接近P的数字。设这个数字为N.K和N的XOR将是最大值。 I
的最接近数字是一个与I的差异最小的数字。可以说,对于列表P
中大于L
的数字,这是不正确的。但是对于数字<=P
是不正确的?
请通过提供反驳意见/建议/想法告诉我我是否正确。
答案 0 :(得分:2)
我认为你需要一种叫做Trie
的东西。
考虑K
的每一位,从高到低,当然我们可以贪婪地确定这个答案是否可以1
,我的意思是,首先你尽力得到1024
{1}}(或更高),然后512
,然后是256
,然后......最后到最后一位1
。
首先,您需要检查列表L
中的某个数字是否与最高位中的K
具有相反的值,然后在所有选择的数字中,那么您需要查找数字在第二高位中与K
具有相反的值。
现在解决方案很明显,使用Trie
构建L
,确定从高到低的答案位,这对应于该树上的旅行。
答案 1 :(得分:0)
不,不对。
允许K = 0011
,以便P = 1100
。让L = {0011, 1100}
。您的算法会选择N = 1100
,这明显不正确,因为N^K = 0
,而0011^N = 3
。
答案 2 :(得分:-1)
编码和运行明显的暴力算法所花费的时间远远少于你已经花费的时间。