📅  最后修改于: 2023-12-03 15:08:03.082000             🧑  作者: Mango
在一个整数流中找到给定整数的最大XOR,是一个经典的问题。XOR是一种逻辑运算符,表示按位异或,两个二进制位相同则结果为0,不同则结果为1。
我们可以通过构建字典树(Trie)来解决这个问题。将每个数的二进制表示插入到字典树中,查找时从高位到低位遍历字典树,并尽量选择与目标数不同的位进行翻转,以获得最大的XOR值。
class TrieNode:
def __init__(self):
self.children = {}
self.is_end = False
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, num):
node = self.root
for i in range(31, -1, -1):
bit = (num >> i) & 1
if bit not in node.children:
node.children[bit] = TrieNode()
node = node.children[bit]
node.is_end = True
def find_max_xor(self, num):
node = self.root
xor = 0
for i in range(31, -1, -1):
bit = (num >> i) & 1
if 1 - bit in node.children:
node = node.children[1 - bit]
xor += (1 << i)
else:
node = node.children[bit]
return xor
trie = Trie()
nums = [3, 10, 5, 25, 2, 8]
for num in nums:
trie.insert(num)
assert trie.find_max_xor(1) == 28
assert trie.find_max_xor(6) == 31
assert trie.find_max_xor(9) == 30