Trie-based approach for maximum XOR.
class TrieNode: def init(self): self.children = {}
def findMaximumXOR(nums): root = TrieNode() maxXor = 0
for num in nums:
node = root
xorNode = root
currXor = 0
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]
toggleBit = 1 - bit
if toggleBit in xorNode.children:
currXor = (currXor << 1) | 1
xorNode = xorNode.children[toggleBit]
else:
currXor = currXor << 1
xorNode = xorNode.children.get(bit, xorNode)
maxXor = max(maxXor, currXor)
return maxXor
time, space.