Data Structures19 sections · 729 units
Open in Course

Maximum XOR Solution

Implement your solution

function findMaximumXOR(nums):
    root = TrieNode()

    // Insert all numbers
    for num in nums:
        node = root
        for i from 31 down to 0:
            bit = (num >> i) & 1
            if node.children[bit] == null:
                node.children[bit] = TrieNode()
            node = node.children[bit]

    // Find max XOR for each number
    maxXor = 0
    for num in nums:
        node = root
        xor = 0
        for i from 31 down to 0:
            bit = (num >> i) & 1
            opp = 1 - bit
            if node.children[opp]:
                xor |= (1 << i)
                node = node.children[opp]
            else:
                node = node.children[bit]
        maxXor = max(maxXor, xor)

    return maxXor

Time: O(32n)=O(n)O(32n) = O(n). Space: O(32n)=O(n)O(32n) = O(n) for trie.