Question
Given an integer array nums, return the maximum result of nums[i] XOR nums[j], where 0 <= i <= j < n.
Example 1:
Input: nums = [3,10,5,25,2,8]
Output: 28
Explanation: The maximum result is 5 XOR 25 = 28.
Constraints:
1 <= nums.length <= 2 * 105
0 <= nums[i] <= 231 - 1
Approach:
I have solved using Trie
where I add each elements and after adding I search for the number which can result in maximum xor
.
Solution:
class TreeNode:
def __init__(self, value = '-1'):
self.val = value
self.left = None
self.right = None
class Solution(object):
def findMaximumXOR(self, a):
root = TreeNode()
msf = float('-inf')
for i in a:
bits = format(i, 'b').zfill(31)
node = root
for bit in bits:
if bit == '0' and node.left:
node = node.left
elif bit == '0':
new_node = TreeNode('0')
node.left = new_node
node = new_node
if bit == '1' and node.right:
node = node.right
elif bit == '1':
new_node = TreeNode('1')
node.right = new_node
node = new_node
ssf=''
node = root
for bit in bits:
if bit == '0' and node.right:
ssf += '1'
node = node.right
elif bit == '1' and node.left:
ssf += '1'
node = node.left
elif node.left:
ssf += '0'
node = node.left
else:
ssf += '0'
node = node.right
val = int(ssf, 2)
msf = max(msf, val)
return msf
Question: What is the time complexity of the above solution? In my opinion it is O(N)
where N
is the number of element in nums
.