<p>Given an integer array <code>nums</code>, return <em>the maximum result of </em><code>nums[i] XOR nums[j]</code>, where <code>0 &lt;= i &lt;= j &lt; n</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [3,10,5,25,2,8]
<strong>Output:</strong> 28
<strong>Explanation:</strong> The maximum result is 5 XOR 25 = 28.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [14,70,53,83,49,91,36,80,92,51,66,70]
<strong>Output:</strong> 127
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= nums.length &lt;= 2 * 10<sup>5</sup></code></li>
	<li><code>0 &lt;= nums[i] &lt;= 2<sup>31</sup> - 1</code></li>
</ul>

class Solution:
    def findMaximumXOR(self, nums: List[int]) -> int:
        if len(nums) == 1: return 0
        def create_trie(num_list,nums):
            trie = {}
            for i,num in enumerate(num_list):
                temp = trie
                for n in num:
                    n = int(n)
                    if n not in temp:
                        temp[n] = {}
                    temp = temp[n]
                temp["."] = nums[i]
            return trie

        def bin_(dec,digits):
            bin_num = bin(dec)[2:]
            return ("0"*(digits-len(bin_num))) + bin_num

        def find_nearest_num(num):
            ans = ""
            temp = trie
            for n in num: 
                n = int(n)
                if n in temp:
                    ans += str(n)
                    temp = temp[n]
                else:
                    ans += str(1-n)
                    temp = temp[1-n]
            return int(temp["."])

        digits = math.floor(math.log(max(nums),2)+1)
        bin_nums = [bin_(num,digits) for num in nums]
        trie = create_trie(bin_nums,nums)

        maxi = 0
        for num in nums:
            bin_neg = bin_((1 << digits)-1 - num,digits)
            x = find_nearest_num(bin_neg)
            maxi = max(maxi,num^x)
        return maxi
628265